Назад | Перейти на главную страницу

ssh -R заставить целевой хост принимать соединение на всех интерфейсах

У меня есть хост ИСТОЧНИК, который удален и находится за NAT. Я хочу подключиться к SOURCE через ssh с целевого хоста, который находится в моей домашней сети. Таким образом, я запускаю следующую команду на SOURCE:

ssh -R 2222:localhost:22 TARGET -N

Теперь из TARGET я могу подключиться к SOURCE через ssh -p 2222 localhost. Хорошо

С TABLET в той же сети TARGET я ожидал, что это сработает:

ssh -p 2222 TARGET

Вместо этого похоже, что TARGET принимает соединения только через порт 2222 от localhost. Следующее находится в TARGET:

user@TARGET:~/$ netstat -l | grep 2222
tcp        0      0 localhost:2222          *:*                     LISTEN     
tcp6       0      0 localhost:2222          [::]:*                  LISTEN 

Есть ли способ сделать удаленную сторону ssh -R принимать соединения со всех его интерфейсов?

По умолчанию он будет прослушивать только localhost (интерфейс обратной связи). Вам нужно указать bind_address как 0.0.0.0 в вашей команде:

ssh -R 0.0.0.0:2222:localhost:22 TARGET -N

Вам также необходимо настроить демон SSH на целевом хосте, чтобы позволить клиенту указывать bind_address. По умолчанию прослушивание всех интерфейсов запрещено. Таким образом, вы всегда обнаружите, что он прослушивает loopback, даже если вы 0.0.0.0 как bind_address.

У вас должна быть такая строка в /etc/ssh/sshd_config чтобы позволить клиенту указать адрес привязки.

GatewayPorts clientspecified

Когда закончите, вы можете проверить, используя netstat -lntp на целевой машине.