Попытайтесь записать MTU на передающей стороне (на самом деле, обеим сторонам, вероятно, будет нужен он). Мог ли быть существует устройство, это или не генерирует или передает Путь пакеты исследования MTU правильно. Если понижение mtu к, скажем, 1350 на обоих концах фиксирует его, затем займитесь расследованиями, есть ли у Вас ACLs блокирующийся ICMP.
Вы могли просто использовать
ssh -o ControlPath=$socket -O check
за каждый $socket Вы имеете открытый (легкий, если Вы сохраняете их в единственном каталоге).
Это возвращается 255, если проверка перестала работать (соединение, не активное еще), другое значение, если это передает. Вы, возможно, должны указать имя хоста также, но ничто, что awk на $socket не даст Вам :)
Мой текущий подход должен использовать lsof
найти сокеты Unix. Если я знаю целевое имя файла, указанное ControlPath
Я могу искать основной процесс как это:
function find_master_pid() {
lsof -a -U -u $USER -c ssh | grep $CM_DIR/$RUSER@$HOST | sed 's/^ssh *//' | cut -d' ' -f1 | sort -u
}
Это затем даст мне PID
(к сожалению, давание имени файла Unix снабжает файл сокетом непосредственно к lsof
не работает иначе, я мог просто попросить, чтобы это произвело меня pid
с -f
; следовательно sed
и cut
)
Поиск дочернего процесса более хитер. Основной процесс открывает новый сокет для каждого дочернего процесса, подключенного к стандартному файлу. Дочерний процесс содержит сокет, просто отмеченный socket
. Однако inode, возвращенный lsof
тот меньше, чем соответствующий основной сокет процесса. Таким образом, следующее находит дочерние процессы, которые подключены к основному процессу (этому нужно $MASTER_PID
проверять по)
function find_child_pid() {
for CHILD_PID in `lsof -a -U -u $USER -c ssh | grep socket | sed 's/^ssh *//' | cut -d' ' -f1 | sort -u`
do
CHECK_PID=0
for NODE in `lsof -a -U -u $USER -p $CHILD_PID -F i | grep ^i | sed 's/i//'`
do
MASTER_NODE=$((NODE+1))
CHECK_PID=`lsof -a -U -u $USER -p $MASTER_PID | grep $MASTER_NODE | wc -l`
[[ $CHECK_PID == 1 ]] && echo $CHILD_PID
done
done
}
@ Äntwert vum Renik huet fir mech net funktionéiert. Kuckt hei ënnendrënner fir wat gemaach huet.
Dëst funktionnéiert fir mech just d'Socket-Datei fir de Kontrollmeeschter:
$ ssh -o ControlPath=~/.ssh/<controlfile> -O check <bogus arg>
NOTIZ: Dir kënnt och ssh -S ~ / .ssh /
och, wat e bësse méi kuerz Form vun den uewe genannten ass.
Hei ass e Beispill wou ech schonn eng Verbindung mat engem Remote Server etabléiert hunn:
$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check blah
Master running (pid=89228)
$
An domat ofgebrach:
$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O check blah
Control socket connect(/Users/user1/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74): No such file or directory
$
Wann et nach ëmmer verbonnen, dëst géif et forcéieren direkt erauszekommen:
$ ssh -S ~/.ssh/master-66496a62823573e4760469df70e57ce4c15afd74 -O exit blah
Exit request sent.
$
Et ass fir mech onkloer, awer et schéngt potenziell e Feeler am ssh
ze sinn datt et en zousätzlecht Argument zum Schluss erfuerdert, och wann blah
ass sënnlos am Kontext vun de Schalteren déi ech benotzen.
Ouni et gëtt mir dëst:
$ ssh -S ~/.ssh/master-57db26a0499dfd881986e23a2e4dd5c5c63e26c2 -O check
usage: ssh [-1246AaCfGgKkMNnqsTtVvXxYy] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-E log_file] [-e escape_char]
[-F configfile] [-I pkcs11] [-i identity_file]
[-L [bind_address:]port:host:hostport] [-l login_name] [-m mac_spec]
[-O ctl_cmd] [-o option] [-p port]
[-Q cipher | cipher-auth | mac | kex | key]
[-R [bind_address:]port:host:hostport] [-S ctl_path] [-W host:port]
[-w local_tun[:remote_tun]] [user@]hostname [command]
$ ssh -V
OpenSSH_6.9p1, LibreSSL 2.1.8
CentOS 7.x
$ ssh -V
OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017
Ech hunn dat bestätegt béid vun dëse Versiounen, de Besoin fir den zousätzleche falschen Argument war erfuerderlech.
Tôi đã viết một tiện ích giúp dễ dàng quản lý các kết nối SSH ControlMaster. Nó được gọi là cmc
:
TimidRobot / cmc: Bộ điều khiển ControlMaster - Quản lý dễ dàng các kết nối SSH ControlMaster .