如何找到 ssh 连接的另一端

如何找到 ssh 连接的另一端

我正在通过 SSH 从主机 A 连接到主机 B。

有没有办法找到连接源并从 B 重新连接到 A(例如从 B 到 A 进行 scp)?

答案1

如果您只是想找到您连接的主机,请使用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

答案2

此命令显示已建立的 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}'

答案3

要获取您所连接主机的 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>

相关内容