我现在遇到了,在您通过 ssh 连接到 Ubuntu 14.04 并将 sshd_config 更改为无效状态后,这service ssh reload
将导致服务器停止侦听但不会关闭我已建立的活动 ssh 会话。
要重现我所做的步骤:
连接到 ssh 服务器:
ssh host
变为
/etc/ssh/sshd_config
无效状态,例如设置:GatewayPorts 0.0.0.0:62222
重新加载服务器配置
sudo service ssh reload
检查在步骤 1) 中建立的 ssh 连接是否仍然处于活动状态,您可以输入任何您想要的内容。
不要关闭已建立的连接并尝试从另一个终端再次连接到服务器:
ssh host
就我而言,我收到了这条消息:
ssh: connect to host IP_ADDR port SSH_PORT: Connection refused
这意味着 ssh 服务器不再监听传入的连接,但不知何故仍然神奇地运行并处理我建立的连接。
我认为这有时会非常方便某人将自己锁定在 ssh 会话中,这样其他人就无法确定连接到服务器并且仍然能够执行用户想要的任何内容。
所以问题是:这是期望的行为吗?这种实施的最初目的是什么?
顺便说一句,我注意到 ssh 服务器在这种情况下处于有点不一致的状态:
$ service ssh reload
reload: Job is not running: ssh
$ service ssh start
start: Job is already running: ssh
因此,要恢复服务器,我必须运行:
service ssh reload
可能重要的注意事项:
- Ubuntu 服务器由Mail-in-a-Box v0.20 配置,没有进行进一步的更改。
- 服务器提供商(DigitalOcean)在 sshd_config 中为我设置了另外两个规则:
- ClientAliveInterval 120
- ClientAliveCountMax 2
因为用户连接在不同的进程中运行。这是一个非常有用的功能。
以这种方式编写 TCP 服务器是常见的做法。例如,它与 Apache 有点不同,后者产生了几个工作人员,这些工作人员被重用于后续连接。