Ну, возвращаясь к этому вопросу, я запускаю команду
ssh -R 8080:localhost:80 -N root@example.com
на Mac. Тем не менее, порт, который туннелируется, не работает публично. Я запускаю такую команду, чтобы сделать так, чтобы локальный порт можно было открыть на удаленном компьютере. И он работает при открытии порта на локальном хосте на удаленном компьютере, но когда я пытаюсь получить доступ к общедоступному IP-адресу удаленного компьютера с моего локального компьютера, порт не открывается. Как бы я сделал общедоступный туннель на IP для любого доступа?
РЕДАКТИРОВАТЬ: Кажется, что удаленная сторона привязывается только на локальном хосте, а не ко всем интерфейсам.
РЕДАКТИРОВАТЬ 2: клиент Mac OS X 10.6 и сервер Linux Mint, но оба они OpenSSH.
ssh
ip
openssh
ssh-tunnel
Тревор Рудольф
источник
источник
Ответы:
Если вы проверите справочную страницу для ssh, вы обнаружите, что синтаксис для
-R
чтения:Когда
bind_address
опущен (как в вашем примере), порт привязан только к интерфейсу обратной связи. Чтобы связать его со всеми интерфейсами, используйтеили же
или же
Первая версия привязывается ко всем интерфейсам индивидуально. Вторая версия создает общую привязку только для IPv4, что означает, что порт доступен на всех интерфейсах через IPv4. Третья версия, вероятно, технически эквивалентна первой, но, опять же, она создает только одну привязку
::
, что означает, что порт доступен через IPv6 изначально и через IPv4 через IPv4-сопоставленные адреса IPv6 (не работает в Windows, OpenBSD) , (Вам нужны кавычки, потому[::]
что в противном случае можно было бы интерпретировать как глобус.)Обратите внимание, что если вы используете
sshd
сервер OpenSSH ,GatewayPorts
необходимо включить опцию сервера (установить наyes
илиclientspecified
), чтобы это работало (проверьте файл/etc/ssh/sshd_config
на сервере). В противном случае (значение по умолчанию для этой опции -no
), сервер всегда будет принудительно привязывать порт только к интерфейсу обратной связи.источник
*
в bash будут выдавать файлы и мне это нужно\*
0.0.0.0
- это только IPv4, но это будет происходить большую часть времени :)Редактировать:
-g
работает для локальных перенаправленных портов, но вам нужен обратный / удаленный перенаправленный порт, который отличается.То, что вы хотите, это .
По сути, на
example.com
, установитьGatewayPorts=clientspecified
в/etc/ssh/sshd_config
.--- предыдущий (неправильный) ответ ---
Используйте опцию -g. Со страницы руководства ssh:
источник
netstat -elnpt
из отдельного tty, чтобы выяснить, какие порты связаны с каким адресом. Без-g
, порт должен быть привязан к127.0.0.1:PORT
. С-g
, он должен быть связан0.0.0.0:PORT
, что делает его доступным удаленно.GatewayPorts=clientspecified
илиGatewayPorts clientspecified
Вот мой ответ для завершения:
В конечном итоге я использовал
ssh -R ...
для туннелирования, а такжеsocat
для перенаправления сетевого трафика на127.0.0.1
:туннель привязан к 127.0.0.1:
ssh -R mitm:9999:<my.ip>:8084 me@mitm
Сокат:
mitm$ socat TCP-LISTEN:9090,fork TCP:127.0.0.1:9999
Другой вариант - создать локальный туннель, но я нахожу это намного медленнее.
mitm$ ssh -L<mitm.ip.address>:9090:localhost:9999 localhost
источник
socat
работал потрясающе. Супер полезно, положив это в мой задний карман;]Вы также можете использовать двойную переадресацию, если вы не хотите или можете изменить / etc / ssh / sshd_config.
Сначала перенаправьте на временный порт (например, 10080) на устройстве обратной связи на удаленном компьютере, затем используйте локальную переадресацию туда, чтобы перенаправить порт 10080 на 80 на всех интерфейсах:
источник
Используйте опцию «порты шлюза».
ssh -g -R REMOTE_PORT:HOST:PORT ...
Чтобы использовать это, вам, вероятно, нужно добавить "
GatewayPorts yes
" к вашему серверу/etc/ssh/sshd_config
.источник
Хосты Jump - довольно недавнее дополнение к OpenSSH. Это требует SSH-доступа к промежуточному соединению, но должно работать без дополнительной настройки.
Эта команда инструктирует SSH сначала подключиться
root@example.com
, а затем с этого компьютера инициировать подключение к порту 8080 вlocalhost
(т. Е. К порту, который туннелируется от промежуточного хоста к удаленному хосту) подremoteuser
именем пользователя.источник
Если вы хотите поместить конфигурацию в вас,
~/.ssh/config
а не использовать параметры командной строки, вы можете попробовать что-то вродеHost REMOTE_HOST_NAME RemoteForward \*:8080 127.0.0.1:80
Помните, что брандмауэр удаленного хоста разрешает подключения к 8080 и гарантирует, что для
GatewayPorts
параметра вашей/etc/ssh/sshd
конфигурации не установлено значениеno
источник