Я создал обратный туннель от сервера к конечной точке, используя команду:
ssh -R 127.0.0.1:4000:localhost:81 user@server.domain
Туннель был создан на стороне конечной точки, и он ведет от порта 4000 сервера к порту 81 конечной точки. Служба прослушивает этот порт, но это не важно. Я сделал это потому, что конечная точка находится за NAT, и мне нужно было получить к ней доступ извне.
Интересно, могу ли я получить IP-адрес конечной точки на стороне сервера. Был похожий вопрос:
Как найти IP-адрес источника обратного туннеля SSH?
но мой случай специфичен. Я не хочу вводить команды вручную, потому что к серверу будет много обратных туннелей, и я могу использовать только порт, к которому привязана конечная точка.
Другими словами: как получить IP-адрес туннеля на стороне конечной точки, используя только порт 4000 на стороне сервера? Я не могу найти никакой корреляции между портом 4000 на сервере с установленным SSH-соединением для туннельных целей.
netstat -plant (на сервере) показывает:
tcp 0 0 127.0.0.1:4000 0.0.0.0:* LISTEN 30307/sshd: user
tcp 0 0 8.8.8.8:22 1.2.3.4:44874 ESTABLISHED 12531/sshd: user
tcp 0 0 8.8.8.8:22 15.16.17.18:44258 ESTABLISHED 30203/sshd: user
tcp 0 0 8.8.8.8:22 22.22.22.22:46696 ESTABLISHED 15639/sshd: user
Как видите, служба прослушивает порт 4000 (этот порт перенаправляется на порт 81 конечной точки, который здесь не отображается) и три соединения ssh. Один из них обслуживает тоннель. Но я не знаю, какой именно. 8.8.8.8 - это IP-адрес Сервера.
Взяв идентификатор процесса ssh из netstat,
lsof -p $pid -a -d 3
покажет IP другого конца соединения. Поскольку ssh может быть прыгающим, это может быть не последнее местоположение.