scp 命令不工作:连接被远程主机关闭 (Mac OS X)

Not working scp command: Connection closed by remote host (Mac OS X)

我正在通过 Mac 终端在远程服务器上工作,因为我将它从 10.5 更新到 OSX 10.10 我每次尝试 scp 从服务器到我的电脑:

ssh_exchange_identification: Connection closed by remote host
lost connection

如果我向后执行 scp(从 mac 复制到服务器),它工作正常,如果我从另一个 mac.[=17= 执行它,它工作正常]

如果我做一个冗长的 scp,它会给我这个:

Executing: program /usr/bin/ssh host xx.xx.xx.x, user User, command scp -v -t /Users/User
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to xx.xx.xx.x [xx.xx.xx.x] port 22.
debug1: Connection established.
debug1: identity file /home/user/.ssh/identity type -1
debug1: identity file /home/user/.ssh/identity-cert type -1
debug1: identity file /home/user/.ssh/id_rsa type -1
debug1: identity file /home/user/.ssh/id_rsa-cert type -1
debug1: identity file /home/user/.ssh/id_dsa type -1
debug1: identity file /home/user/.ssh/id_dsa-cert type -1
debug1: identity file /home/user/.ssh/id_ecdsa type -1
debug1: identity file /home/user/.ssh/id_ecdsa-cert type -1
ssh_exchange_identification: Connection closed by remote host
lost connection

我尝试查看各种主机、配置、ssh 文件,但我并没有解决太多问题。

检查目标用户的 .bashrc 或等效文件。 ~/.bashrc 用于非交互式登录。如果有 echo 或输出任何内容的命令,它将破坏 SCP 协议。

服务器和桌面上的用户必须在使用 ssh(或 scp)之前在本地创建密钥。您可以使用此命令创建强密钥(算法 RSA 和长度 4096):

ssh-keygen -t rsa -b 4096 -C "username"

如果您的服务器上已有密钥,请检查 ~/.ssh 目录

的权限

如前所述here,此目录中的 .ssh 目录和文件的所有者必须是您的用户。 .ssh 目录的权限必须是 700 (drwx-----),私钥文件 600 (-rw ------) 和 public 密钥必须是 644 (-rw-r--r--)。您可以使用 :

进行检查
ls -alh

如果不是这种情况,您可以更改它:

   chown -R username ~/.ssh
   chmod 700 ~/.ssh
   chmod 600 ~/.ssh/id_*
   chmod 644 ~/.ssh/*.pub

我刚从我的个人 Mac 到我们用作本地服务器的 Mac 桌面的 SCP 遇到了同样的问题。 运行 sudo sshd -t 向我展示了以下提示:

/var/empty must be owned by root and not group or world-writable

我所做的只是将所有者改回 root(我不确定为什么还没有,但我记得从 Mavericks 升级到 Yosemite 让我对权限感到头疼):

cd /var
sudo chown root empty

希望对您有所帮助。

我也遇到了这个问题

我试过了"sudo sshd -t",好像没问题。

然后我检查了我的 "hosts.allow" & "hosts.deny",没问题。

最后我发现我在命令中使用了 '~' 路径,就是这样:

scp ~/Downloads/afile root@host2:~/Downloads

我改成了下面这个:

scp /home/Downloads/afile root@host2:/home/Downloads

现在可以使用了。希望这对您有所帮助。

'sudo sshd -t' 清楚地显示了哪个配置行无效。一旦评论该配置行就解决了 SCP 问题。非常感谢您的回答。

系统偏好面板→共享小程序→选中远程登录复选框。这将启用 SSH,进而启用 SCP。

我在使用 scp -P [wrong_custom_port] user@host:/source /destination

时遇到了同样的错误

在谷歌搜索了一段时间但没有找到任何直接答案后,我终于意识到我在远程主机上的 ssh 连接使用了不同的自定义端口号。

希望这对遇到类似问题的人有所帮助。

我会全力以赴

我今天遇到了这个问题,试图从我局域网中的一台计算机将文件 scp 到我的 macbook,并收到了发送到 STDOUT 的可爱消息

scp: Connection closed

这并没有真正给我带来太多帮助,添加 -VVVV 也没有显示出任何明显的问题,尽管在这样的事情不起作用时使用 -VVVV 并不是我想要的我每天都看(可能漏掉了什么)

综上所述,sudo sshd -t 的上述命令将 nothing 打印到 STDOUT。

所以从这里去哪里,幸运的是我过去遇到过 ssh 问题,恕我直言,这是获得关于为什么某个 ssh 相关的 sane 消息的最简单方法任务即。 scping 一个文件到某种 ssh 服务器是 停止 当前 运行 服务器并在 debug 中启动它 从前台进程中的终端模式(如果 ssh 配置文件设置正确(不是我研究过的东西),可能会启动另一个 ssh 服务器以防止停止现有服务器),但对于我使用,停止现有服务器并在 debug 中启动它的新实例会产生奇迹 ‍♀️,因此 运行

sshd -d

然后尝试将文件发送到服务器,我在 STDOUT

中看到以下行
debug1: server_input_channel_req: channel 0 request subsystem reply 1
debug1: session_by_channel: session 0 channel 0
debug1: session_input_channel_req: session 0 req subsystem
debug1: subsystem: cannot stat /usr/local/Cellar/openssh/8.8p1/libexec/sftp-server: No such file or directory
debug1: subsystem: exec() /usr/local/Cellar/openssh/8.8p1/libexec/sftp-server
Starting session: subsystem 'sftp' for capin from 10.0.1.42 port 63866 id 0
debug1: Received SIGCHLD.
debug1: session_by_pid: pid 2107
debug1: session_exit_message: session 0 channel 0 pid 2107
debug1: session_exit_message: release channel 0
Received disconnect from 10.0.1.42 port 63866:11: disconnected by user
Disconnected from user capin 10.0.1.42 port 63866
debug1: do_cleanup
debug1: do_cleanup
debug1: PAM: cleanup
debug1: PAM: closing session
debug1: PAM: deleting credentials

这让我觉得那些 error/warning 消息是我的问题,并从那里继续进行故障排除。