Как подключиться по ssh к серверу, с которым я не могу связаться напрямую?

Контекст

Я использую Ubuntu Desktop в качестве основного компьютера, который я назову D. Я хочу подключиться к серверу S через ssh, но брандмауэр блокирует меня.

У меня есть доступ к серверу S по очень громоздкому пути, включающему виртуальную машину Windows и PuTTY . Это делает работу с этим сервером очень утомительной: совершенно другая среда, копирование / вставка не работает, я не могу правильно использовать свой рабочий стол, когда к нему подключен (Alt-Tab не работает на виртуальной машине) и т. Д.

Я проверил что я могу ssh с сервера S на мой настольный компьютер D (противоположный тому, что мне нужно).

Могу ли я каким-то образом инициировать «переадресацию портов» или что-то подобное с сервера, чтобы я мог ssh на сервер со своего рабочего стола?

17
задан 22 February 2018 в 15:17
3 ответа

Вы можете использовать следующую команду для настройки SSH-туннеля от удаленного сервера к вашему локальному компьютеру:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Когда туннель настроен, вы можете просто ssh на удаленный сервер, используя следующую команду:

$ ssh -p 1234 user@localhost

Обратите внимание, что вам необходимо настроить ключи ssh для автоматического входа в систему (без запроса пароля). Если вы хотите создать туннель SSH в интерактивном режиме, вы можете удалить параметры -f -N . Для получения дополнительной информации man ssh .

32
ответ дан 2 December 2019 в 20:28

Вместо того, чтобы пытаться обойти некоторые вещи и создать запутанный путь, нельзя ли просто попросить разрешить SSH с рабочего стола на сервер? Если он у вас есть, и вы должны получить доступ к серверу, я не понимаю, почему вам отказали в запросе.

1
ответ дан 2 December 2019 в 20:28

Если вы используете более новую версию OpenSSH (7.3+), вы можете использовать ProxyJump , который волшебным образом объединяет все вместе:

ssh -J windows_machine remote_server

Что в вашем ~ / .ssh / config выглядит так:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJump поддерживает полный синтаксис SSH, поэтому, если вы jim на windows_server , он использует порт 2222 для ssh. удаленный_сервер находится на IP 192.168.0.110 с windows_server , тогда вы можете написать:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

И по-прежнему просто запустите ssh удаленный_сервер , чтобы попасть туда.


Если вы используете более старую версию SSH, используйте ProxyCommand - это позволяет вам указать SSH сначала запустить команду для установления прокси-соединения, прежде чем запускать фактическая команда SSH.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Здесь используется параметр SSH -W , который является сокращением для более загадочного синтаксиса netcat .

Обратите внимание, что, как и при запуске ssh remote_server теперь вы находитесь на windows_machine , вам необходимо убедиться, что вы используете IP-адрес remove_server из окна перехода , а не IP-адрес вашего компьютера - они вполне могут быть одинаковыми.

Затем вы можете добавить эту директиву в свой ~ / .ssh / config файл:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Это означает, что если remote_server будет другое t, как видно из windows_machine , то вы можете поместить это в конфигурацию и по-прежнему просто использовать ssh remote_server .

5
ответ дан 2 December 2019 в 20:28

Теги

Похожие вопросы