![停止 sshd 并终止正在进行的连接](https://linux22.com/image/162877/%E5%81%9C%E6%AD%A2%20sshd%20%E5%B9%B6%E7%BB%88%E6%AD%A2%E6%AD%A3%E5%9C%A8%E8%BF%9B%E8%A1%8C%E7%9A%84%E8%BF%9E%E6%8E%A5.png)
在某些情况下,我希望停止 sshd 守护进程。当我这样做时,我希望当前打开的连接也被停止。默认情况下,sshd 服务停止时不会终止现有连接。
这是可配置的吗?我可以设置 sshd 以便每当它停止时,打开的连接也会停止吗?
有哪些替代方案?简单地killall sshd
?
答案1
事实上,sshd 服务在关闭时不会关闭活动会话。
使用killall sshd
,您也将关闭您自己的 sshd 服务器,如果它已经停止,这没什么大不了的,尽管从远程站工作可能有风险。
为了避免这种情况,我首先找到绑定到客户端的 sshd 实例的 PID:
# who am i
root pts/0 2019-10-25 13:52 (1.2.3.4)
# ps fxww|grep pts/
12144 ? Ss 0:00 \_ sshd: root@pts/0
12150 pts/0 Ss 0:00 | \_ -bash
12205 pts/0 R+ 0:00 | \_ ps fxww
12206 pts/0 S+ 0:00 | \_ grep pts/
12169 ? Ss 0:00 \_ sshd: root@pts/1
12175 pts/1 Ss+ 0:00 \_ -bash
现在我知道我可以终止12144
或12169
关闭现有会话。考虑到我的会话是附加的pts/0
,我可能会避免杀死12144
。
要自动化此操作:
exclude=`who am i | awk '{print $2}'`
ps axww | grep -v "$exclude" \
| awk '/sshd: [^ ]*@pts/{print $1}' \
| while read pid;
do
kill $pid
done