我正在运行 Ubuntu Server 10.04.1。当我尝试通过 ssh 登录服务器时,却无法登录。相反,我得到了connection refused
错误。我尝试 ping 机器,得到了回复!所以,很明显的原因是 SSH 守护进程已停止。
重启后,我可以通过 ssh 登录到我的服务器。过了一段时间,我查看了日志/var/log/syslog
,发现了以下记录:
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2465) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2469) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2473) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2477) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2481) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2485) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2489) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2493) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2497) terminated with status 255
Jan 16 10:57:09 myserver init: ssh main process ended, respawning
Jan 16 10:57:09 myserver init: ssh main process (2501) terminated with status 255
Jan 16 10:57:09 myserver init: ssh respawning too fast, stopped
我搜索了类似的问题/解决方案。有人说这是由于 SSH 守护程序试图在联网之前启动而导致的,他们建议将 更改为ListenAddress
。我认为这不是我的情况的原因,因为我的问题发生在系统启动并运行之后。/etc/ssh/sshd_config
0.0.0.0
知道是什么原因造成的吗?这是 Ubuntu Server,它应该正在运行并使用 SSH 进行远程访问。
更新:
这是我在中找到的日志片段/var/log/auth.log
。
Jan 16 10:56:38 myserver sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/usr/bin/vim /etc/ssh/sshd_config
Jan 16 10:57:09 myserver sudo: user : TTY=pts/0 ; PWD=/home/user ; USER=root ; COMMAND=/etc/init.d/ssh reload
Jan 16 10:57:09 myserver sshd[1465]: Received SIGHUP; restarting.
Jan 16 10:57:09 myserver sshd[2461]: Server listening on 0.0.0.0 port 22.
Jan 16 10:57:09 myserver sshd[2465]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2465]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2469]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2469]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2473]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2473]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2477]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2477]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2481]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2481]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2485]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2485]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2489]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2489]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2493]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2493]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2497]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2497]: fatal: Cannot bind any address.
Jan 16 10:57:09 myserver sshd[2501]: error: Bind to port 22 on 0.0.0.0 failed: Address already in use.
Jan 16 10:57:09 myserver sshd[2501]: fatal: Cannot bind any address.
似乎在我重新加载 SSH 守护程序后才开始出现此错误。我应该避免使用ssh reload
而改用ssh restart
吗?
答案1
我刚刚在 12.04 机器上遇到了同样的问题。即同样的症状。唉,当我在 中引入ListenAddress
带有inet
和inet6
地址的子句时,总是会发生sshd_config
这种情况。简而言之,这似乎是格式错误的症状sshd_config
- 尽管日志文件没有说明任何类似情况。
故障排除sshd
我发现,在这种情况下,启动时sshd
不让其成为守护进程通常非常有用。我遇到的问题是,syslog
或都没有auth.log
显示任何有意义的内容。
当我从终端启动它时,我得到:
# $(which sshd) -Ddp 10222
/etc/ssh/sshd_config line 8: address family must be specified before ListenAddress.
好多了!这个错误消息让我看到了问题所在并修复了它。两个日志文件都没有包含此输出。
注意:至少在 Ubuntu 上,这$(which sshd)
是满足sshd
绝对路径要求的最佳方法。否则您将收到以下错误:sshd re-exec requires execution with an absolute path
。-p 10222
使监听sshd
该替代端口,覆盖配置文件 - 这样它就不会与可能正在运行的sshd
实例发生冲突。确保在此处选择一个空闲端口。
这种方法帮助我多次发现问题,无论是身份验证问题还是其他类型的问题。要获得真正详细的输出stdout
,请使用$(which sshd) -Ddddp 10222
(注意添加dd
以增加详细程度)。要获得更多调试优点,请查看man sshd
。
此方法的主要优点是它允许您检查sshd
配置没有必须sshd
在默认端口上重新启动。通常情况下这不会干扰现有的 SSH 连接,但我见过这种情况。因此,这允许人们在可能切断对远程服务器的访问之前验证配置文件(例如,我对一些 VPS 甚至物理服务器都这样做,我需要额外付费才能获得对机器的带外访问)。
答案2
你应该检查一下刚才发生了什么前SSH 开始陷入困境syslog
。如果网络子系统崩溃,这就可以解释为什么sshd
开始失败。
我还会检查/var/log/auth.log
。这是sshd
的日志,它可能会给你一个更好的错误消息。
答案3
这似乎是错误 #687535 的结果,该错误最近在 natty 中被修复,并且作为建议的更新上传到 maverick 和 lucid。
https://bugs.launchpad.net/ubuntu/lucid/+source/openssh/+bug/687535
我鼓励大家去那里,尝试测试用例(搜索测试用例),并在安装建议的修复之前和之后发布您的结果。这将有助于 SRU 团队确定验证已完成并将其作为更新发布。
答案4
重启后,我在 Linode 上的 Ubuntu 11.10 映像上遇到了类似的问题。ssh 服务会在 syslog 中生成:
Mar 18 06:31:33 servername kernel: init: ssh main process ended, respawning
Mar 18 06:31:33 servername kernel: init: ssh main process (3419) terminated with status 255
Mar 18 06:31:33 servername kernel: init: ssh main process ended, respawning
Mar 18 06:31:33 servername kernel: init: ssh main process (3422) terminated with status 255
Mar 18 06:31:33 servername kernel: init: ssh respawning too fast, stopped
它是一个测试箱,大约有 60 天的正常运行时间,因此在某个时候,我安装了一些东西,附加到 sshd_config 的底部:
ClientAliveInterval 60
ClientCountAliveMax 60
注释掉这些行可以让 ssh 启动。