Tor*_*xed 116 linux ssh key-authentication
我没有使用hosts.allowor hosts.deny,而且 SSH 可以在我的 Windows 机器(相同的笔记本电脑,不同的硬盘驱动器)上运行,但不能在我的 Linux 机器上运行。
ssh -vvv root@host -p port 给出:
OpenSSH_6.6, OpenSSL 1.0.1f 6 Jan 2014
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 20: Applying options for *
debug2: ssh_connect: needpriv 0
debug1: Connecting to host [host] port <port>.
debug1: Connection established.
debug1: identity file /home/torxed/.ssh/id_dsa type -1
debug1: identity file /home/torxed/.ssh/id_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_6.6
ssh_exchange_identification: read: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)
在 Windows 机器上,一切正常,所以我检查了安全日志,其中的行是相同的,服务器对待两台不同的“机器”没有什么不同,它们都允许通过公钥身份验证。
因此得出的结论是,这一定是我本地 ArchLinux 笔记本电脑的问题……但是什么?
[torxed@archie ~]$ cat .ssh/known_hosts
[torxed@archie ~]$
Run Code Online (Sandbox Code Playgroud)
所以这不是问题...
[torxed@archie ~]$ sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Run Code Online (Sandbox Code Playgroud)
与防火墙设置没有冲突(目前)。
[torxed@archie ~]$ ls -la .ssh/
total 20
drwx------ 2 torxed users 4096 Sep 3 2013 .
drwx------ 51 torxed users 4096 May 11 11:11 ..
-rw------- 1 torxed users 1679 Sep 3 2013 id_rsa
-rw-r--r-- 1 torxed users 403 Sep 3 2013 id_rsa.pub
-rw-r--r-- 1 torxed users 170 May 11 11:21 known_hosts
Run Code Online (Sandbox Code Playgroud)
权限似乎很好(在服务器上相同)。/etc/ssh/ssh_config除了在客户端中进行的大量自动配置以相同的错误结束之外,还尝试了不配置相同的结果。
0xC*_*22L 79
如果您排除了任何“外部”因素,以下步骤通常有助于缩小范围。因此,虽然这不能直接回答您的问题,但它可能有助于追踪错误原因。
sshd我发现在任何此类情况下通常非常有用的是在sshd不让它守护进程的情况下启动。我的问题是既没有syslog也没有auth.log表现出任何有意义的东西。
当我从终端启动它时,我得到:
# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.
Run Code Online (Sandbox Code Playgroud)
好多了!此错误消息使我能够查看问题所在并进行修复。两个日志文件都不包含此输出。
注意:至少在 Ubuntu 上,这$(which sshd)是满足sshd绝对路径要求的最佳方法。否则你会得到以下错误:sshd re-exec requires execution with an absolute path. 该-p 10222品牌sshd听,替代端口,修改配置文件-这是这样,它不具有潜在冲突运行sshd情况。确保在这里选择一个自由端口。
最后:连接到备用端口 ( ssh -p 10222 user@server)。
这种方法多次帮助我发现问题,无论是身份验证问题还是其他类型。要获得真正详细的输出stdout,请使用$(which sshd) -Ddddp 10222(注意添加dd以增加详细程度)。有关更多调试优点检查man sshd。
这种方法的主要优点是它允许您检查sshd配置而无需sshd在默认端口上重新启动。通常这不应该干扰现有的 SSH 连接,但我已经看到了。因此,这允许人们在 - 可能 - 切断对远程服务器的访问之前验证配置文件(例如,我对某些 VPS 甚至物理服务器进行了验证,我需要支付额外费用才能获得带外访问权限到机器)。
小智 16
您还可以拥有一个内存严重碎片化的主机,以至于它无法为页面分配连续的内存来分叉托管 SSH 会话的进程。
在这种情况下,您可以获得以下任一消息:
ssh_exchange_identification: read: Connection reset by peer
Run Code Online (Sandbox Code Playgroud)
或者:
Connection closed by aaa.bbb.ccc.ddd
Run Code Online (Sandbox Code Playgroud)
取决于主机在退出之前能走多远。
如果内存碎片是明显的原因,解决方案是通过其他方式访问服务器并重新启动一些相关服务。我发现 Apache 和 MySQL 是 VM 的罪魁祸首,因为 VM 没有交换分区。如果失败,请重新启动主机。
以防万一,因为这发生在我身上。确保您在主机中运行了 sshd!
这是一个愚蠢的失败,但可能真的是你的问题。
小智 6
我ssh_exchange_identification: read: Connection reset by peer在一个循环启动 16 个或更多 ssh 会话的脚本中遇到了这个问题。sshd 显然跟不上;添加一个短暂的睡眠解决了我的问题:
for i in $(seq 32)
do
ssh -f root@$HOST "./test_server -p $(expr $BASE_PORT + $i)" > svr${i}.out
# for > 8 connections, ssh has ssh_exchange_identification issues
sleep 0.1
done
Run Code Online (Sandbox Code Playgroud)
小智 5
我发现这个错误是由于超过了到服务器的 ssh 会话。我发现主机试图连接并杀死来自所有客户端的所有会话。清除所有会话后问题解决。
| 归档时间: |
|
| 查看次数: |
572824 次 |
| 最近记录: |