我正在通过 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>