2017-09-19 66 views
0

我正致力于在两台服务器之间启用会话复用。 我想在创建新服务器(或IP)之前关闭所有现有套接字,并在完成我的任务后关闭新创建的服务器(或IP)。这是我迄今所做的:如何关闭SSH套接字

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 

可以通过关闭套接字

remote_ip=192.168.20.2  #User inut 
    remote_port=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" 

,但我得到:

 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 

任何人都可以请帮我这个:

Pseudo-terminal will not be allocated because stdin is not a terminal. 

使用-t和-tt试过吗?

+0

为什么你需要*一个ptty分配?这是一个警告,而不是一个错误。你是否有理由不忽略它? –

+0

虽然'xargs -i {}“-O exit”'有它自己的问题,与PTY分配无关。 –

+0

......坦率地说,你为什么要吝啬'ps'呢?您可以直接从文件系统获取套接字。 –

回答

1

如果你想杀死从你的机器到给定的远程IP地址和端口每一个连接,你可以这样做如下(使用fuser,从包括所有主要的Linux发行版的psmisc包的工具):

fuser -k -n tcp ",${remote_ip},${remote_port}"