Як підключитися до ПК через інший ПК за допомогою ssh


13

У мене є три комп’ютери.

PC1 і PC2 перебувають у приватній локальній мережі, де PC1 відомий як PC2 як192.168.0.2

PC2 і PC3 знаходиться в іншій локальній мережі, де PC2 відомий як PC3 як192.168.123.101

Як я можу підключитися до PC1 з PC3 за допомогою 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
Стефан

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цього, він буде проходити прямо через шлюз і прозоро підключати вас до сервера з іншого боку.


2
Не використовуйте, ssh -Aякщо ви не довіряєте адміністратору шлюзової машини. Він не може отримати ваш приватний ключ, але поки ви підключені до шлюзу ssh -A, він може використовувати пересланий агент для підключення до інших машин, як і ви.
Джендер

2

Переадресація портів може стати в нагоді.
Від PC1:

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

7777 може бути будь-яким портом (за умови, що він уже не використовується). Мені просто подобається це число, плюс будь-яке "замовлення", яким я можу керувати +1 "(7778, 7779, тощо, тощо).

Після цього у вас буде прозорий тунель від локального порту PC1 7777 до порту PC3 22. Просто випустіть:

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

І ви повинні бути на ПК3.
Ви також можете використовувати -D для динамічного переадресації порту, якщо ви хочете встановити проксі-сервер SOCKS.

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

Ура!


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, але більше інформації про це я не зміг знайти. Хтось знає більше?

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.