Как подключиться к компьютеру через другой компьютер с помощью SSH

13

У меня есть три компьютера.

ПК1 и ПК2 находятся в частной локальной сети, где ПК1 известен ПК2 как192.168.0.2

ПК2 и ПК3 находятся в другой локальной сети, где ПК2 известен как ПК3 как192.168.123.101

Как я могу подключиться к ПК1 с ПК3 по SSH.

Есть ли что-то вроде:

ssh user@192.168.0.2 -via user@192.168.123.101
Стефан
источник

Ответы:

19
ssh -o 'ProxyCommand ssh -W %h:%p user@192.168.123.101'

Тогда вы можете просто бежать ssh PC1.

Лучше всего использовать через псевдоним в ~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p user@192.168.123.101

Для более старых версий OpenSSH, у которых нет этой -Wопции (я думаю, что это означает ≤5.4), убедитесь, что netcat доступен на ПК2, и используйте

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh user@192.168.123.101 nc %h %p
Жиль "ТАК - прекрати быть злым"
источник
1
+1 Да, и у меня есть аналогичный ответ stackoverflow.com/questions/1010808/1122282#1122282 с некоторыми более подробной информацией.
Эфимент
нужно было установить netcat
Stefan
4

С помощью SSH есть четкое решение:

  1. на вашем локальном компьютере настройте так ~/.ssh/config, чтобы он имел следующее:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. Как на шлюзе, так и на конечном сервере, к которому вы хотите подключиться, убедитесь, что у вас есть открытые ключи локального клиента, расположенные в ~/.ssh/authorized_keys

  3. На компьютере шлюза вам нужно изменить так ~/.ssh/authorized_keys, чтобы в начале строки, которая указывает открытый ключ вашего клиента, добавили принудительную команду следующим образом:

    command="ssh -A user_name@ServerTheGatewaySees.ButTheClientCant.net" ...yourPublicKey....
    

-AЯвляется направить агент , если вам не нравится , чтобы отправлять пароли все время ...

Таким образом, каждый раз, когда вы делаете что-то подобное, ssh WhatYouWillCallTheConnectionон будет проходить прямо через шлюз и прозрачно соединит вас с сервером на другой стороне.

Shamster
источник
2
Не используйте, ssh -Aесли вы не доверяете администратору шлюза. Он не может получить ваш закрытый ключ, но пока вы подключены к шлюзу ssh -A, он может использовать перенаправленный агент для подключения к другим машинам, как вы.
Jander
2

Переадресация портов может пригодиться.
С ПК1:

~# ssh -fN -L 22:PC3:7777 -l <user> PC2  

7777 может быть просто любым портом (при условии, что он еще не используется). Мне просто нравится этот номер, плюс любой «заказ», которым я могу управлять с помощью +1 (7778, 7779 и т. Д., И т. Д.).

После этого у вас будет «прозрачный» туннель от локального порта 7777 ПК1 до порта 22 ПК3. Просто выполните команду:

~# ssh -l <user> -p 7777 localhost  

И вы должны быть на ПК3.
Вы также можете использовать -D для динамической переадресации порта, если вы хотите установить прокси SOCKS.

~# ssh -D <someport> -fN -L 22:PC3:7777 -l <user> PC2  

Ура!

wormintrude
источник
1

Ответ 2017+ (начиная с v7.3) на это - ProxyJump :

ssh -J user@jumphost user@destination

, что сокращенно от:

ssh -o "ProxyJump user@jumphost" user@destination

Это можно сократить ssh destс помощью ~/.ssh/configфрагмента как такового:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on
Алекс Страгиес
источник
0

Единственное решение, которое я знаю для этого, это сценарии ssh с Belier :

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

Некоторое время назад я обнаружил этот файл README.sshhop на домашней странице MIT Lincoln Laboratory, но не смог найти дополнительную информацию об этом. Кто-нибудь знает больше?

echox
источник