为什么我通过 SFTP 连接时收到“远程主机关闭与 [主机] 的连接”错误?

为什么我通过 SFTP 连接时收到“远程主机关闭与 [主机] 的连接”错误?

我想user通过 SFTP 连接到远程主机。

此外,我想进入一个特定的目录(例如/home/user/dir)。我创建了用户,默认工作目录为,/home/user/dir并设置了一个/home/user/.ssh/authorized_key文件来托管我的公钥。

但是,使用 连接并输入的密码后,我立即收到以下错误:sftp -P 7000 [email protected]userConnection 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

相关内容