Как закрыть сокет SSH
Я работаю над включением мультиплексирования сессий между двумя серверами. Я хочу закрыть все существующие сокеты для этого сервера (или 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 ответ
Если вы хотите разорвать каждое соединение с вашего компьютера на заданный удаленный IP-адрес и порт, вы можете сделать это следующим образом (используя fuser
инструмент из пакета psmisc, включенный во все основные дистрибутивы Linux):
fuser -k -n tcp ",${remote_ip},${remote_port}"