Как сказать, используется ли соединение ssh ControlMaster

Попытайтесь записать MTU на передающей стороне (на самом деле, обеим сторонам, вероятно, будет нужен он). Мог ли быть существует устройство, это или не генерирует или передает Путь пакеты исследования MTU правильно. Если понижение mtu к, скажем, 1350 на обоих концах фиксирует его, затем займитесь расследованиями, есть ли у Вас ACLs блокирующийся ICMP.

6
задан 10 December 2010 в 11:31
4 ответа

Вы могли просто использовать

ssh -o ControlPath=$socket -O check 

за каждый $socket Вы имеете открытый (легкий, если Вы сохраняете их в единственном каталоге).

Это возвращается 255, если проверка перестала работать (соединение, не активное еще), другое значение, если это передает. Вы, возможно, должны указать имя хоста также, но ничто, что awk на $socket не даст Вам :)

6
ответ дан 3 December 2019 в 00:27
  • 1
    Это намного более просто для наблюдения, если существующее соединение открыто; это не говорит мне, если это на самом деле используется, но я предполагаю, что это не настолько важно... (и у меня есть метод ниже) –  David Fraser 10 December 2010 в 14:24

Мой текущий подход должен использовать 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
}
0
ответ дан 3 December 2019 в 00:27

@ Ä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 / benotzen. .. och, wat e bësse méi kuerz Form vun den uewe genannten ass.

Beispill

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]

Versiounsinfo

OSX
$ 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.

Referenzen

1
ответ дан 3 December 2019 в 00:27

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 .

0
ответ дан 3 December 2019 в 00:27

Теги

Похожие вопросы