我正致力于在两台服务器之间启用会话多路复用。 我想在创建新服务器之前关闭此服务器(或IP)的所有现有套接字,并在完成任务后关闭新创建的套接字。这是我到目前为止所做的:
remote_ip=192.168.20.2 #User inut
remote_port=222
可以通过以下方式创建套接字:
SSHSOCKET=~/.ssh/remote_$remote_ip
ssh -M -f -N -o ControlPath=$SSHSOCKET $remote_ip -p $remote_port
可以通过以下方式搜索控制路径:
ps x | grep $remote_ip | grep ssh | cut -d '=' -f 2
/root/.ssh/remote_192.168.20.2 192.168.20.2 -p 222
可以通过以下方式关闭套接字:
ssh -S /root/.ssh/remote_192.168.20.2 192.168.20.2 -p 64555 -O exit
尝试通过以下方式关闭套接字:
ps x | grep $remote_ip | grep ssh | cut -d '=' -f 2 | xargs ssh -S | xargs -i {} "-O exit"
但我明白了:
Pseudo-terminal will not be allocated because stdin is not a terminal.
尝试使用-t和-tt:
ps x | grep $remote_ip | grep ssh | cut -d '=' -f 2 | xargs ssh -Stt | xargs -i {} "-O exit"
ssh: Could not resolve hostname /root/.ssh/remote_192.168.20.2: Name or service not known
xargs: ssh: exited with status 255; aborting
有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
如果要终止从计算机到给定远程IP地址和端口的每个连接,可以按照以下方式执行此操作(使用fuser
,所有主要包含的psmisc包中的工具Linux发行版):
fuser -k -n tcp ",${remote_ip},${remote_port}"