我发现很多关于调试为什么无法通过 SSH 连接的问题都得到了解答,但它们似乎都要求你仍然可以访问系统 - 或者说没有它什么也做不了。就我而言,我无法直接访问系统,但我可以使用恢复控制台访问文件系统。
情况是这样的:我的提供商今天进行了一些内核更新,在此过程中还重启了我的服务器。出于某种原因,我无法再通过 SSH 连接,而是得到了一个 ssh:连接到主机 mydomain.de 端口 22:连接被拒绝
我不知道 sshd 是不是没有运行,或者是否有什么东西(例如 iptables)阻止了我的 ssh 连接尝试。我查看了日志文件,/var/log 中的任何文件都没有提到 ssh,并且 /var/log/auth.log 是空的。在内核更新之前,我可以正常登录并使用证书,这样每次从本地计算机连接时都不需要密码。
我到目前为止尝试过的:
我在 /etc/rc*.d/ 中查找了 /etc/init.d/ssh 脚本的链接,但什么也没找到。所以我估计 sshd 在启动时没有正确启动。由于我无法在系统中运行任何程序,因此无法使用 update-rc 来更改此情况。我尝试使用 ln -s /etc/init.d/ssh /etc/rc6.d/K09sshd 手动创建链接,然后重新启动服务器 - 这并没有解决问题。我不知道是否可以这样做,在 rc6.d 中创建它是否正确,以及 K09 是否正确。我只是从 apache 中复制了它。
我还尝试更改 /etc/iptables.rules 文件以允许所有内容:
# 由 iptables-save v1.4.0 于 2009 年 12 月 10 日星期四 18:05:32 生成 *弄脏 :路由前接受 [7468813:1758703692] :输入接受 [7468810:1758703548] :转发接受 [3:144] :输出接受 [7935930:3682829426] :POSTROUTING 接受 [7935933:3682829570] 犯罪 # 于 2009 年 12 月 10 日星期四 18:05:32 完成 # 由 iptables-save v1.4.0 于 2009 年 12 月 10 日星期四 18:05:32 生成 *筛选 :输入接受 [7339662:1665166559] :转发接受 [3:144] :输出接受 [7935930:3682829426] -A 输入-i lo -j 接受 -A 输入-p tcp -m tcp --dport 25 -j 接受 -A 输入-p tcp -m tcp --dport 993 -j 接受 -A 输入-p tcp -m tcp --dport 22 -j 接受 -A 输入-p tcp -m tcp --dport 143 -j 接受 -A 输入 -m conntrack --ctstate 相关,已建立 -j 接受 -A 输入-p tcp -m tcp --dport 80 -j 接受 -A 输入-p tcp --dport 8080 -s localhost -j 接受 -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7 -A 输入 -j 接受 -A 转发 -j 接受 -A 输出 -j 接受 犯罪 # 于 2009 年 12 月 10 日星期四 18:05:32 完成 # 由 iptables-save v1.4.0 于 2009 年 12 月 10 日星期四 18:05:32 生成 *自然 :路由前接受 [101662:5379853] :POSTROUTING 接受 [393275:25394346] :输出接受 [393273:25394250] 犯罪 # 于 2009 年 12 月 10 日星期四 18:05:32 完成
我不确定这样做是否正确或是否有任何效果。我也没有在 /var/log 中的任何文件中找到任何关于 iptables 的提及。
那我还能做什么?谢谢你的帮助。
ps:按照 lain 的建议添加 crontab 行后,我可以在文件 /var/logauth.log 中找到以下内容
3月7日 21:13:58 mysubdomain sshd[64900]: debug1: sshd 版本 OpenSSH_5.3p1 Debian-3ubuntu5 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 读取 PEM 私钥完成:输入 RSA 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 检查黑名单文件 /usr/share/ssh/blacklist.RSA-2048 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 检查黑名单文件 /etc/ssh/blacklist.RSA-2048 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 私钥:#0 类型 1 RSA 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 读取 PEM 私钥完成:输入 DSA 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 检查黑名单文件 /usr/share/ssh/blacklist.DSA-1024 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 检查黑名单文件 /etc/ssh/blacklist.DSA-1024 3 月 7 日 21:13:58 mysubdomain sshd[64900]: debug1: 私钥:#1 类型 2 DSA
答案1
连接被拒绝表明 sshd 未运行。尝试从命令行以调试模式运行 sshd,查看是否有任何错误消息。
/usr/sbin/sshd -f /etc/ssh/sshd_config -D -d
编辑:
由于您无权运行上述操作,请尝试将其放入 @reboot cron 作业中
添加
@reboot root /bin/mkdir -p -m0755 /var/run/sshd && /usr/sbin/sshd -f /etc/ssh/sshd_config -d &>/var/log/sshd_debug
进入/etc/crontab
Ubuntu sshd 要求 /var/run/sshd 目录存在。
答案2
您可以尝试将日志记录(SSH 流量)添加到防火墙规则并重新启动计算机。这样,您应该能够验证数据包是否到达目的地(因此 sshd 不起作用)。
关于这一部分:
我尝试使用 ln -s /etc/init.d/ssh /etc/rc6.d/K09sshd 手动建立链接并重新启动服务器 - 但这并不能解决问题。
运行级别 6 用于重新启动,所以这不是您感兴趣的。而 K09sshd 中的 K 表示终止。;-) 尝试使用奥德克看看会发生什么。
答案3
我尝试使用 ln -s /etc/init.d/ssh /etc/rc6.d/K09sshd 手动建立链接并重新启动服务器 - 这并不能解决问题
您几乎答对了。K* 名称会导致服务停止。S* 名称会导致服务启动。
rc6.d 用于进入运行级别 6(表示“重新启动”)时控制子系统。
您希望在运行级别 3(普通多用户)和 5(多用户 + X)下启动服务。将 /etc/rc.3d/S90sshd 和 /etc/rc5.d/S90sshd 符号链接到 /etc/init.d/sshd。这将导致 sshd 在系统启动时启动。
答案4
我尝试使用 ln -s /etc/init.d/ssh /etc/rc6.d/K09sshd 手动建立链接并重新启动服务器 - 这并不能解决问题
尝试添加指向 rc3.d 而不是 /etc/rc6.d 的链接(ln -s /etc/init.d/ssh /etc/rc3.d/S99sshd)