Jak połączyć się z komputerem przez inny komputer za pomocą ssh

13

Mam trzy komputery.

PC1 i PC2 znajdują się w prywatnej sieci LAN, gdzie PC1 jest znany jako PC2 jako192.168.0.2

PC2 i PC3 znajdują się w innej sieci LAN, gdzie PC2 jest znany jako PC3 jako192.168.123.101

Jak mogę połączyć się z PC1 z PC3 za pomocą SSH.

Czy istnieje coś takiego:

ssh [email protected] -via [email protected]
Stefan
źródło

Odpowiedzi:

19
ssh -o 'ProxyCommand ssh -W %h:%p [email protected]'

Następnie możesz po prostu uruchomić ssh PC1.

Najlepiej stosować przez alias w ~/.ssh/config:

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh -W %h:%p [email protected]

W przypadku starszych wersji OpenSSH, które nie mają tej -Wopcji (myślę, że to oznacza ≤5.4), upewnij się, że netcat jest dostępny na PC2 i użyj

Host PC1
HostName 192.168.0.2
User user
ProxyCommand ssh [email protected] nc %h %p
Gilles „SO- przestań być zły”
źródło
1
+1 Tak, i mam podobną odpowiedź stackoverflow.com/questions/1010808/1122282#1122282 z kilkoma dodatkowymi szczegółami.
ephemient
potrzebny do zainstalowania netcata
Stefan
4

Używając SSH istnieje jasne rozwiązanie:

  1. na komputerze lokalnym skonfiguruj ~/.ssh/configtaki, aby miał:

    host WhatYouWillCallTheConnection
        hostname the.gateway.server.address.com
        user YourUsernameOnTheGateway
    
  2. Zarówno na bramie, jak i na serwerze końcowym, z którym chcesz się połączyć, upewnij się, że klucze publiczne lokalnego klienta znajdują się w ~/.ssh/authorized_keys

  3. Na komputerze-bramie należy zmienić ~/.ssh/authorized_keystaki, aby na początku wiersza określającego klucz publiczny klienta dodać polecenie wymuszone w następujący sposób:

    command="ssh -A [email protected]" ...yourPublicKey....
    

Przekazanie -Aagenta, jeśli nie chcesz ciągle wysyłać haseł ...

W ten sposób za każdym razem, gdy zrobisz coś takiego ssh WhatYouWillCallTheConnection, przejdzie prosto przez bramę i połączy cię z serwerem po drugiej stronie w sposób przezroczysty.

Shamster
źródło
2
Nie używaj, ssh -Ajeśli nie ufasz administratorowi maszyny bramy. Nie może uzyskać twojego klucza prywatnego, ale dopóki jesteś podłączony do bramy ssh -A, może on używać przekazanego agenta do łączenia się z innymi komputerami.
Jander
2

Przekierowanie portów może się przydać.
Z PC1:

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

7777 może być dowolnym portem (pod warunkiem, że nie jest jeszcze używany). Po prostu podoba mi się ten numer plus wszelkie „zamawianie”, którym mogę zarządzać przez +1 (7778, 7779 itp.).

Po wykonaniu tej czynności będziesz mieć „przezroczysty” tunel z lokalnego portu PC1 7777 do portu 22 PC3. Po prostu problem:

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

I powinieneś być na PC3.
Możesz także użyć opcji -D, aby dynamicznie przekierować port, jeśli chcesz ustanowić proxy SOCKS.

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

Twoje zdrowie!

wormintrude
źródło
1

Odpowiedź 2017+ (od wersji 7.3) na to ProxyJump :

ssh -J user@jumphost user@destination

, co jest skrótem od:

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

Można to skrócić ssh destza pomocą ~/.ssh/configfragmentu jako takiego:

Host jump
    User MyJumpHostUser
    Hostname Jump.host.tld

Host dest
    ProxyJump jump
    User MyDestUser
    Hostname des.tin.ati.on
Alex Stragies
źródło
0

Jedyne znane mi rozwiązanie to skrypty ssh z Belierem :

Belier umożliwia otwarcie powłoki lub wykonanie polecenia na komputerze zdalnym za pośrednictwem połączenia SSH. Główną cechą Beliera jest możliwość przejścia przez kilka komputerów pośrednich przed wykonaniem zadania.

Jakiś czas temu znalazłem README.sshhop na stronie głównej MIT Lincoln Laboratory, ale nie byłem w stanie znaleźć dalszych informacji na ten temat. Czy ktoś wie więcej?

echox
źródło