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