重启14.04服务器后导致SSH问题的原因是什么?

为什么重新启动运行Ubuntu 14.04的服务器会给我“拒绝连接”错误?

我看到ssh: connect to host port 22: Connection refused但仅限于14.04并且仅在重新启动后。 我在家里使用12.04桌面。 我该如何解决这个问题?


为了使问题更清楚,以下是对我有用或无效的:

  • SSH进入全新安装的12.04> logout> SSH in again>工作
  • SSH进入全新安装的12.04> reboot> SSH in again>工作
  • SSH进入全新安装的14.04> logout> SSH in again>工作
  • SSH进入全新安装的14.04> reboot> SSH再次>连接被拒绝

我遇到的问题是14.04独有的,只有在重启后才会发生。 在此之前我有几台运行12.04的服务器,一切都运行良好。 我有一台新的服务器我想使用14.04,我想知道出了什么问题。 有什么建议?


这是我到目前为止所尝试的内容:

 sudo traceroute -p 22 -T  

Traceroute工作正常,我从SSH端口22上的服务器得到响应。

 initctl list ... ssh start/running, process 23371 ... 

看起来14.04服务器上的ssh设置为在启动时启动(如预期的那样)。

 tom@Desktop:~$ ssh -vvv root@ OpenSSH_5.9p1 Debian-5ubuntu1.4, OpenSSL 1.0.1 14 Mar 2012 debug1: Reading configuration data /etc/ssh/ssh_config debug1: /etc/ssh/ssh_config line 19: Applying options for * debug2: ssh_connect: needpriv 0 debug1: Connecting to  [] port 22. debug1: connect to address  port 22: Connection refused ssh: connect to host  port 22: Connection refused 

编辑:这是来自新创建的机器的整个系统日志 。 我创建了它,SSH并且发出了reboot now命令,然后等待它重新启动并在第二次尝试SSH时出现连接拒绝错误。 通过主机控制面板硬重启,现在SSH连接再次工作。

快速回答:

SSH不是问题。 用于重新启动的命令是问题:不要立即reboot nowrebootshutdown -r now立即重启系统。

命令语法( 自13.04开始 )已经:

 reboot [OPTION]... [REBOOTCOMMAND] 

REBOOTCOMMAND从未存在过。 在12.04,你now被忽略但现在它被使用……它打破了一切。

答案很长,我的测试结果和解释如下:

我有一些类似的问题,一些服务器运行14.04 AND VPS(托管在法国OVH提供商 – 运行OpenVZ)和reboot now服务器本身。

和你一样,我reboot now从控制台发出命令reboot now (使用SSH登录)。 按下RETURN后几秒钟,我的会话自动断开连接。 像你一样,我发出这个命令之后就无法通过SSH重新连接到服务器。

所以,我决定打开OVH提供的KVM控制台。 (使用物理服务器上的键盘和屏幕模拟直接访问此类虚拟服务器)。

我能够连接到我的机器,我看到她进入单用户模式,等待我按CTRL + D继续或输入root密码进入维护模式。 我按下组合键以继续进程,然后再次通过SSH连接到我的系统。 在运行uptime运行uptime之后,我的惊喜是, uptime运行uptime不是2或3分钟而是很多天: reboot now在Ubuntu 14.04 VPS内执行reboot now并不是真正重启但只是要求进入单用户模式!

从这一点来说,我已经学会了永远不要求从我的VPS中重新启动,而是从主机管理界面上提供的命令请求它。

因此,您的SSH安装没有问题。 问题是你reboot now输入reboot now 。 事实上,我之后也测试了它,如果你输入了reboot (只是单词,没有选项),它就会完成你想要做的事情:重新启动服务器。

使用带参数的reboot (来自手册页)使用给定的参数调用shutdown命令。 事实上,如果我shutdown now执行shutdown now ,我有相同的行为:系统没有重新启动,它进入单用户模式。

备注:看起来它是预期的行为,因为在执行此命令后,屏幕上显示的消息显示如下:

系统将进入维护模式

维护模式或单用户模式,这表示相同,运行级别不仅包括shell,没有网络,没有网络进程,…

这可能会令人困惑,但请注意正确使用shutdown ,例如: shutdown -h now立即暂停系统或shutdown -r now立即重启。 我不知道shutdown now只会使系统进入单用户模式。 我通常做init S来实现这一点。

我可能会迟到,这可能很明显,但对我来说有用的是检查配置文件/etc/ssh/sshd_config :使用/etc/init.d/ssh start运行守护程序或任何其他组合显示该服务虽然它不是正在运行,但如果我以其绝对路径启动可执行文件(在我的情况下是/usr/sbin/sshd ),我看到在配置文件的末尾附加了“0B”,导致错误启动时,删除它解决了问题。

另一个潜在原因是ufw丢失了SSH端口规则配置。 至少有一两次发生这种情况,在应用更新和重新启动后,防火墙配置阻止我获得对服务器的访问权限。 使用我的托管服务提供商的VPS控制台工具允许我进入机器并诊断问题。 下面的示例显示了问题(即端口22没有条目):

 user@host:~$ sudo ufw status verbose [sudo] password for user: Status: active Logging: on (low) Default: deny (incoming), allow (outgoing), disabled (routed) New profiles: skip To Action From -- ------ ---- 80,443/tcp (Nginx Full) ALLOW IN Anywhere 25/tcp ALLOW IN Anywhere 143 ALLOW IN Anywhere 110 ALLOW IN Anywhere 993/tcp (Dovecot Secure IMAP) ALLOW IN Anywhere 995/tcp (Dovecot Secure POP3) ALLOW IN Anywhere 25/tcp (Postfix) ALLOW IN Anywhere 465/tcp (Postfix SMTPS) ALLOW IN Anywhere 80,443/tcp (Nginx Full (v6)) ALLOW IN Anywhere (v6) 25/tcp (v6) ALLOW IN Anywhere (v6) 143 (v6) ALLOW IN Anywhere (v6) 110 (v6) ALLOW IN Anywhere (v6) 993/tcp (Dovecot Secure IMAP (v6)) ALLOW IN Anywhere (v6) 995/tcp (Dovecot Secure POP3 (v6)) ALLOW IN Anywhere (v6) 25/tcp (Postfix (v6)) ALLOW IN Anywhere (v6) 465/tcp (Postfix SMTPS (v6)) ALLOW IN Anywhere (v6) 

按如下方式重新启用端口可以解决问题:

 user@host:~$ sudo ufw allow ssh Rule added Rule added (v6) 

对于我的系统,问题是ssh init脚本/etc/init.d/ssh是唯一一个检查init的upstart版本的存在。

所以/etc/init.d/ssh没有启动ssh,因为它认为它将由upstart启动。

就我而言,由于我的特殊配置,upstart无法启动:

/etc/init/ssh.conf中有正确的配置,但是还有一个包含manual/etc/init/ssh.override文件,这意味着ssh应该手动启动。

此文件由get-remnux.sh安装脚本创建。

手动启动或删除/etc/init/ssh.override文件可以解决问题。