我想user
通过 SFTP 连接到远程主机。
此外,我想进入一个特定的目录(例如/home/user/dir
)。我创建了用户,默认工作目录为,/home/user/dir
并设置了一个/home/user/.ssh/authorized_key
文件来托管我的公钥。
但是,使用 连接并输入的密码后,我立即收到以下错误:sftp -P 7000 [email protected]
user
Connection to host.com closed by remote host. Connection closed.
知道它可能来自哪里吗(或如何调试这类问题)?
更新
我最终无法以 身份连接,user
因为authorized_key
没有适当的权限。然而,当我尝试以另一个被授予 组访问权限的/home/user/dir
用户(例如)登录时,我收到了完全相同的错误消息。但结果却是这样user2
/home/user/dir
回复,SFTP chroot jail 在设计上不允许这样做。我将尝试使用/home/user/dir
和之间的符号链接/home/user2/dir
来解决这个问题。
答案1
如何调试
第一步是运行带有详细标志的命令:
sftp -P 7000 -vvv [email protected]
日志分析
连接已建立
debug1: Authentication succeeded (publickey).
但是,ssh
不能设置非阻塞模式:
debug3: fd 1 is not O_NONBLOCK
Connection to host.com closed by remote host.
可能是你的 shell 初始化文件(.bashrc
、.bash_profile
等)破坏了 ssh 连接
答案2
当我遇到类似问题时,我偶然发现了这个问题,然后我跟着这 指南,对我来说很管用。实际上,使用用户的主目录是行不通的,因为您要锁定用户的目录必须由 root 拥有,并且其他任何人都不能写入。
因此,请尝试:
/var/sftp
创建一个由 root 拥有的文件夹添加一个属于 user1 的子文件夹
/var/sftp/user1
,用户可以在其中写入然后进行
/etc/ssh/sshd_config
如下修改,以便用户只能访问自己的文件夹以进行文件访问/上传Match User user1 ForceCommand internal-sftp ChrootDirectory /var/sftp PermitTunnel no AllowAgentForwarding no AllowTcpForwarding no X11Forwarding no
最后重启ssh服务
sudo systemctl restart sshd
可以通过以下方式限制对其他用户文件夹的访问
sudo chmod 700 /var/sftp/*
答案3
我在 chroot SSH 登录时遇到了这个问题。我通过增加日志级别解决了这个问题/etc/ssh/sshd_config
:
LogLevel VERBOSE
然后我重新启动sshd
并在进行连接尝试时查看日志文件:
sudo systemctl restart sshd
tail -f /var/log/auth.log
原来是目录的权限问题:
May 13 09:13:41 myserver sshd[12216]: fatal: bad ownership or modes for chroot directory component "/home/remote/"
答案4
更改您的配置sudo nano /etc/ssh/sshd_config
并更改PasswordAuthentication
来自不到是的
PasswordAuthentication yes