Как найти другой конец соединения SSH

Я подключаюсь через SSH от хоста A к хосту B.

Есть ли способ найти источник соединения и повторно подключиться от B к A (например, сделать scp от B к A)?

1
задан 8 June 2015 в 18:32

3 ответа

Если Вы просто хотите найти хост, Вы соединились от, используйте w:

$ who -m --ips
terdon   pts/4        2015-06-08 20:02 123.456.78.9

Для получения IP только:

$ who -m --ips | awk '{print $NF}'
123.456.78.9

Так, к scp от того хоста, Вы могли сделать:

scp user@$(who -m --ips | awk '{print $NF}'):/remote/path /target/path
0
ответ дан 8 June 2015 в 18:32

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

LANG=C netstat  | grep ESTABLISHED | awk '/:22 |:ssh/ {sub(/:.*/,"",$5 ); system("who | grep \""$5"\"") }'

пользователь, который установил соединение, не может быть определен.

И только хост:

LANG=C netstat  | grep ESTABLISHED | awk '/:22 |:ssh/ {sub(/:.*/,"",$5 ); system("who | grep \""$5"\"") }' | awk '{gsub(/\(|\)/, "", $5); print $5}'
0
ответ дан 8 June 2015 в 18:32

Для получения IP-адреса хоста, Вы соединены от, можно использовать grep на выводе ss:

ss -nt | grep -Po '^ESTAB.*?:22\s+\K[^:]+(?=:\d+)'

Например:

$ ss -nt | grep -Po '^ESTAB.*?:22\s+\K[^:]+(?=:\d+)'
192.168.11.225
  • ss обозначает статистику сокета, ss -nt покажет сокеты TCP с числовыми адресами как конечные точки

  • grep -Po получит только подобранную часть от строки с помощью PCRE (Совместимые с Perl регулярные выражения)

  • ^ESTAB.*?:22\s+ будет соответствовать ESTAB в запуске, сопровождаемом портом 22 с чем-либо промежуточным, \K отбросит соответствие

  • [^:] будет соответствовать нашему желаемому IP-адресу

  • Положительная нулевая ширина предусматривает шаблон (?=:\d+) удостоверьтесь, что IP-адрес сопровождается :<port>

0
ответ дан 8 June 2015 в 18:32

Другие вопросы по тегам:

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