我有几个设备可能需要通过服务器进行维修。
由于设备通过 GPRS 网络连接,入站连接被阻止,因此我让它们每隔几分钟检查一次服务器。如果支持团队需要反向 ssh 隧道,服务器将做出响应,并为他们提供服务器中的可用端口。
一旦此端口被处理到客户端设备,设备将使用以下命令在受限用户帐户(由于文件command="/sbin/nologin"
上的指令,没有可用的 shell authorized_keys
)上打开反向 ssh 隧道:
ssh -fN -R $AVAILABLE_PORT:localhost:22 srvUsername@srvHost -i Indentity
在服务器上,我可以看到可用端口已被使用,netstat -tulpn
输出如下:
tcp 0 0 127.0.0.1:PORT 0.0.0.0:* LISTEN -
tcp 0 0 ::1:PORT :::* LISTEN -
并且该端口将保持监听状态,除非我终止打开它的客户端计算机上的 ssh 进程。
但有时(主要是在网络问题期间)即使我终止进程或关闭客户端机器,该端口仍将继续在服务器上监听。
有没有办法从服务器端关闭该套接字而无需重新启动 ssh 服务?
GPRS 连接有点不稳定,所以我可能会遇到用尽所有可用端口并不得不等到它们过期的情况。此外,我还希望客户端在不再需要连接时成功终止 ssh 进程。我想在服务器端执行此操作。
答案1
以 sudo 身份运行:
sudo netstat -tulpna | grep PORTNUM
最后一栏将显示 PID/sshd
sudo kill -9 PID
完毕。