受限 sftp 用户无法连接的问题

由于业务需要,我按照 这篇文章 的提示设置了一个无 shell 权限的用户,但是却连接不上。

启用 -v 选项后有如下输出

debug1: Authentication succeeded (password).
Authenticated to xx.xx.xx.xx ([xx.xx.xx.xx]:22).
debug1: channel 0: new [client-session]
debug1: Requesting no-more-sessions@openssh.com
debug1: Entering interactive session.
debug1: pledge: network
debug1: channel 0: free: client-session, nchannels 1
debug1: fd 0 clearing O_NONBLOCK
Connection to xx.xx.xx.xx closed by remote host.
Transferred: sent 2444, received 1804 bytes, in 0.0 seconds
Bytes per second: sent 13890079.9, received 10252743.1
debug1: Exit status -1
Couldn’t read packet: Connection reset by peer

很苦恼,谷歌了很久后终于发现了两篇文章:https://unix.stackexchange.com/questions/274995/sftp-ssh-couldnt-read-packet-connection-reset-by-peerhttps://ubuntuforums.org/showthread.php?t=1482005

主要意思是说,在 /etc/ssh/sshd_config 里设置的 ChrootDirectory 的所有者必须是 root,而且该目录的组和其他用户不能有写权限。

Linux命令行编辑按键

在使用shell时,可以使用左右箭头来编辑命令行,并且通过上下箭头来查看之前的命令。这是Linux系统的标准操作。
但使用ctrl键来代替箭头键会更加方便。

  • CTRL-B, 左移光标
  • CTRL-F, 右移光标
  • CTRL-P, 查看上一条命令(或上移光标)
  • CTRL-N, 查看下一条命令(或下移光标)
  • CTRL-A, 移动光标至行首
  • CTRL-E, 移动光标至行尾
  • CTRL-W, 删除前一个词
  • CTRL-U, 删除从光标至行首的内容
  • CTRL-K, 删除从光标至行尾的内容
  • CTRL-Y, 粘贴已删除的文本

Linux下使用ssh代理

阅读本文需要一些前提知识,比如了解什么是linux以及什么是ssh什么是代理,但这些不在本文讨论范围之内。

在终端{Terminal}中运行

$ ssh -qTfNn -D 7070 user@domain

其中7070是端口号

然后在你的浏览器里设置socks5代理,具体设置方法请参考你所用浏览器的帮助文档或谷歌之。
主机{Host}就是本地(localhost或者127.0.0.1),端口{Port}填你在上面命令里写的端口。