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

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

Контекст

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

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

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

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

решение1

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

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

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

$ ssh -p 1234 user@localhost

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

решение2

Если вы используете более новую версию 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. remote_serverнаходится по IP, 192.168.0.110то windows_serverвы можете написать:

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

Ивсе ещепросто бегите ssh remote_serverтуда.


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

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

Это использует SSHoption, который является сокращением для более загадочногосинтаксис 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 являетсядругая машина, как видно из windows_machineэтого, вы можете поместить это в конфигурацию и по-прежнему просто использовать ssh remote_server.

решение3

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

Связанный контент