我现在遇到过这种情况:通过 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 服务器配置如下:邮箱 v0.20并且未做进一步的改变。
- 服务器提供商(DigitalOcean)在 sshd_config 中为我设置了另外两条规则:
- 客户端存活间隔 120
- 客户端存活数最大 2
答案1
因为用户的连接在不同的进程中运行。这是非常有用的功能。
- 它可以防止你因配置不当而将自己锁定在服务器之外
- 它具有更强的防故障能力:单个(用户)进程的故障不会杀死所有其他连接
- 它比处理所有连接的单个进程提供更好的性能
- 它更加安全:用户实际上被分成不同的进程。
以这种方式编写 TCP 服务器是一种常见做法。它与 Apache 略有不同,Apache 会生成多个工作程序,这些工作程序将在后续连接中重复使用。