Перезапустить конкретный реверсивный туннель ssh?

У меня есть несколько машин в дикой природе, которые открывают обратные ssh-подключения к моему серверу. В каждой машине используется другой обратный порт ssh, который я использую для разграничения между машинами. Я использую эти туннели для входа в машины с сервера (очевидно):

me@server:~$ ssh -p 2219 root@localhost Last login: Sun Jun 7 00:18:44 2015 from localhost root@remote_machine:~# 

Удаленные компьютеры используют совершенно разные технологии доступа (DSL, VSAT, GPRS / EDGE / 3G / 4G), поэтому выносливость обратного соединения ssh несколько отличается – и здесь, по-видимому, лежит проблема.

Это список nmap после более длительного периода ожидания (т. Е. Ни один туннель ssh не был принудительно перезапущен, см. Ниже):

 me@server:~$ sudo nmap -sS -p 1000-3000 --open localhost Starting Nmap 5.21 ( http://nmap.org ) at 2015-06-07 11:09 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000014s latency). Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1 Not shown: 1988 closed ports PORT STATE SERVICE 1133/tcp open unknown 1270/tcp open ssserver 1356/tcp open cuillamartin 1590/tcp open unknown 1760/tcp open unknown 1772/tcp open unknown 1823/tcp open unknown 1825/tcp open unknown 1842/tcp open unknown 1907/tcp open unknown 2078/tcp open unknown 2168/tcp open unknown 2185/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds me@server:~$ 

Теперь это слишком мало подключений, поэтому давайте убьем их всех и дождитесь возврата внешних подключений:

 me@server:~$ for i in $(ps axww|grep ssh_key_used_for_reverse_connctions|grep sshd|sed -e 's/^[ \t]*//'|cut -d " " -f 1); do sudo kill -9 $i; done me@server:~$ 

Хорошо, все соединения ушли:

 Starting Nmap 5.21 ( http://nmap.org ) at 2015-06-07 11:13 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000014s latency). Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1 All 2002 scanned ports on localhost (127.0.0.1) are closed Nmap done: 1 IP address (1 host up) scanned in 0.15 seconds 

Подождем (удаленные машины пробую каждые 30 секунд, чтобы установить новое соединение) и посмотрите, что сейчас происходит:

 me@server:~$ sudo nmap -sS -p 1000-3000 --open localhost Starting Nmap 5.21 ( http://nmap.org ) at 2015-06-07 11:14 CEST Nmap scan report for localhost (127.0.0.1) Host is up (0.000015s latency). Hostname localhost resolves to 2 IPs. Only scanned 127.0.0.1 Not shown: 1950 closed ports PORT STATE SERVICE 1125/tcp open unknown 1129/tcp open unknown 1133/tcp open unknown 1155/tcp open unknown 1156/tcp open unknown 1157/tcp open unknown 1162/tcp open unknown 1176/tcp open unknown 1185/tcp open unknown 1198/tcp open unknown 1215/tcp open unknown 1269/tcp open unknown 1270/tcp open ssserver 1343/tcp open unknown 1345/tcp open unknown 1351/tcp open equationbuilder 1356/tcp open cuillamartin 1420/tcp open timbuktu-srv4 1432/tcp open blueberry-lm 1541/tcp open rds2 1590/tcp open unknown 1698/tcp open unknown 1743/tcp open unknown 1760/tcp open unknown 1772/tcp open unknown 1773/tcp open unknown 1812/tcp open unknown 1823/tcp open unknown 1825/tcp open unknown 1842/tcp open unknown 1859/tcp open unknown 1900/tcp open upnp 1907/tcp open unknown 2002/tcp open globe 2030/tcp open device2 2031/tcp open unknown 2032/tcp open unknown 2033/tcp open glogger 2035/tcp open imsldoc 2058/tcp open unknown 2078/tcp open unknown 2093/tcp open unknown 2159/tcp open unknown 2168/tcp open unknown 2169/tcp open unknown 2180/tcp open unknown 2185/tcp open unknown 2186/tcp open unknown 2219/tcp open unknown 2221/tcp open unknown 2228/tcp open unknown Nmap done: 1 IP address (1 host up) scanned in 0.16 seconds me@server:~$ 

Ах, намного лучше.

Теперь, мои вопросы: Даже в первом сценарии с небольшими открытыми связями ps axww|grep ssh_key_used_for_remote_connections|grep sshd|sed -e 's/^[ \t]*//' показывает намного больше ssh-соединений, тогда они фактически открыты, поэтому соединение, кажется, тихо умирает в фоновом режиме, если удаленная машина не замечает его .

A. Есть ли лучший способ реализации обратных ssh-подключений , например, какие-либо параметры ssh, которые я мог пропустить, что делает удаленную машину более надежной и надежной? Это скрипт, запущенный на удаленных компьютерах, чтобы открыть обратный туннель ssh:

 #!/bin/bash while true do ssh -i /some/dir/reverse-ssh.key -o TCPKeepAlive=yes -o ServerAliveInterval=5 -o ServerAliveCountMax=3 -nNTv -R $(grep -o "[0-9][0-9][0-9][0-9]" /some/dir/id):localhost:22 reverse_ssh_user_name@office.radiopark.biz sleep 30 done 

Поэтому я уже использую -o TCPKeepAlive=yes -o ServerAliveInterval=5 -o ServerAliveCountMax=3 . /some/dir/id содержит четырехзначное число, которое каждая машина использует как обратный ssh-порт, с точки зрения серверов обратный порт ssh.

B. Есть ли лучший способ kill только безответственные обратные соединения , оставив все «рабочие» связи неповрежденными? Пока я убиваю их всех, но это кажется грубым и неправильным. ps не позволит мне увидеть идентификатор порта, и мне нужно будет каким-то образом установить соединение обратного порта ssh и ssh ssh на моем сервере.

Я заглянул в autossh но это, похоже, autossh то, что делают мои скрипты (?).

mosh может быть и речи, поскольку он использует UDP-соединения (которые часто не проходят вообще) и случайные порты выше 60000 (которые тоже не проходят).

Это покажет вам процессы с использованием туннеля:

 netstat -tnp | grep :2219 | awk '{print $NF}' 

Я не могу воспроизвести ваши мертвые связи, но это должно работать

 for i in $(seq 2000 2030) do if !nmap -p $i localhost netstat -tnp | grep 2222 | grep '/ssh *$' | awk '{print $NF}' | sed -e 's#/ssh##' | xargs kill fi end