快速版本:
ssh
在我的台式机和scp
笔记本电脑上工作。从我的 android 手机上的 termuxssh
可以工作,但scp
不能。在这种情况下,我收到有关“连接已关闭”的错误。
扩展版
最初,当我问这个问题时,我在连接到我的 Fedora Linux 机器时,在我的 android 手机上从 termux 运行 scp 时遇到了这个问题。而且我一直很困惑,ssh
所以我提供了很多调试信息。因为后来我了解到这个问题与 termux 完全无关,而与 OpenSSH 版本有关,所以我试图清理很多无关的信息转储并使其更易于访问,同时仍然保留相关的错误消息以更好地进行 seo 匹配.
设备:
- 设备 A(计算机):运行 openssh.x86_64 8.7p1-3.fc35 的 Fedora 35
- 设备 B(计算机):运行 openssh.x86_64 8.7p1-3.fc35 的 Fedora 35
- device C (phone): android上的termux (我原来抓不到openssh版本,估计是v8.8或更高版本)
计算机 A 和 B 具有基本相同sshd_config
的文件,所有 3 个基本相同的~/.ssh/config
文件内容。
问题:
A->B、B->A、C->A 和 C->B 之间的 ssh 连接都工作正常。我对从任何一台计算机连接到我的手机都不感兴趣,并且从未在其上配置过 sshd,因此没有测试这种情况。
但是,对于通过 ssh 运行的 scp,我遇到了以下问题: A->B 和 B->A 工作,而 C->A 和 C->B 失败,出现以下错误:
$ scp -rp "[email protected]:/home/desktop-user/Pictures/test.jpg" .
scp: Connection closed
调试:
- 大量验证 ssh 文件权限和所有权、
~/.ssh/config
设置等。没有明显问题。 - 我(暂时)在 A 和 B 上禁用了 SELinux 和 firewalld,但仍然遇到同样的问题。
- 根据这篇文章,我将自定义的 id_rsa(和 id_rsa.pub)文件名重命名为使用默认名称,并编辑了相应的
~/.ssh/config
定义。没变。 - 我没有尝试(从 C 中)尝试从远程接收/拉取文件,而是尝试将文件推送/发送到远程。没变。
- 从 C 开始,我确保所有软件包都是最新的。没变。
- 从 C 中,我运行
scp
带有标志的命令-v
以提供详细的调试信息。在编辑哈希等之后,我添加到pastebin。我看到的主要内容是密钥似乎已被接受,但最后一行表明“debug1:退出状态 127”。在线结果似乎表明scp
主机上不存在......但就我而言,它是。所以还是没有变化。
主机的 sshd 配置
同样,A 和 B 具有基本相同的配置
# grep -Pv '^\s*(#|$)' /etc/ssh/sshd_config
Include /etc/ssh/sshd_config.d/*.conf
Port 22
Ciphers [email protected],aes256-ctr
LoginGraceTime 1m
PermitRootLogin no
MaxAuthTries 4
MaxSessions 6
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
X11Forwarding yes
PrintMotd no
UseDNS yes
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
Protocol 2
DenyUsers root docker-user
MACs [email protected],hmac-sha2-512,[email protected],hmac-sha2-256
KexAlgorithms diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha256