如何关闭SSH套接字

时间:2017-09-19 22:39:24

标签: bash ssh xargs

我正致力于在两台服务器之间启用会话多路复用。 我想在创建新服务器之前关闭此服务器(或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

有人可以帮我解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

如果要终止从计算机到给定远程IP地址和端口的每个连接,可以按照以下方式执行此操作(使用fuser,所有主要包含的psmisc包中的工具Linux发行版):

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