У меня есть хост ИСТОЧНИК, который удален и находится за 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
на целевой машине.