Ubuntu 18, брандмауэр не включен, и я настроил sshd_config, чтобы разрешить пересылку и шлюз:
AllowTcpForwarding yes
GatewayPorts yes
Если я создам туннель, прослушивающий все порты:
ssh -f -N -L 222:0.0.0.0:22 root@example.com
Это нормально работает, если я вошел на этот компьютер и подключаюсь с помощью localhost:
ssh root@localhost -p 222
Но когда я подключаюсь к прокси-машине с другой машины, соединение не работает:
ssh root@192.168.0.20 -p 222
ssh: connect to host 192.168.0.20 port 222: Connection refused
Что я делаю не так ??
РЕДАКТИРОВАТЬ
# lsof -n -i:222
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 4937 root 4u IPv6 5877871 0t0 TCP [::1]:222 (LISTEN)
ssh 4937 root 5u IPv4 5877872 0t0 TCP 127.0.0.1:222 (LISTEN)
Даже если я убью исходный процесс и создам новый процесс и укажу IP-адрес, lsof все равно покажет, что он только прослушивает localhost!
ssh -f -N -L 222:192.168.0.20:22 root@example.com
По умолчанию sshd
связывает перенаправленные порты с localhost
только. Это поведение можно перезаписать, используя подстановочный знак или указав адрес.
Для использования с подстановочным знаком, где :222::22
эквивалентно :222::22
user@client$ ssh -L :222::22 server
Это откроет слушателя на client
на port 222
на всех интерфейсах, которые будут перенаправлены на server:22
.
Если вы хотите привязать прослушиватель и перенаправленный адрес, вы можете использовать IP-адреса или имена хостов соответствующих хостов.
user@client$ ssh -L client:222:localhost:22 server
Это откроет слушателя на client:22
на IP-адресе, который разрешен client
и будут отправлены server
к localhost:22
.
Другой вариант - использовать GatewayPorts=yes
вариант в ssh
команда, которая также откроет прослушиватель подстановочных знаков на client
.
user@client$ ssh -o GatewayPorts=yes -L 222::22 server
Можно также добавить это в ~/.ssh/config
файл, чтобы сделать настройки постоянными для определенного хоста.
Host server
GatewayPorts yes