Tuneluj połączenie ssh przez maszynę pośrednią w jednym poleceniu


10

Czy istnieje sposób, w jednym poleceniu, ustanowić połączenie ssh z mojego komputera A, poprzez komputer B, do komputera C, tak że mam dostęp do powłoki na komputerze C?

Zmarszczka (która wydaje się wykluczać po prostu przekazywanie połączenia ssh za pomocą opcji -L) polega na tym, że mam hasło do konta na komputerze B, a konto na komputerze B jest upoważnione do połączenia z kontem na komputerze C, ale Nie mam hasła do konta na komputerze C.


Odpowiedzi:


8

Zrozumiałem, że chcesz się tylko zalogować do komputera C, a nie tunelować niczego od A do C. Więc to powinno załatwić sprawę:

ssh -t computer-b "ssh computer-c"

Być może będziesz musiał wprowadzić hasło dwukrotnie, najpierw dla komputera B, a następnie dla komputera C, ale można tego uniknąć, używając uwierzytelniania parą kluczy ssh.


1
Dzięki - działa! Jeśli mogę być tak odważny, aby poprosić o dalsze działania. Jakieś pomysły, w jaki sposób mogę scpować plik od A do C za pomocą jednego polecenia?
poczytalność

To trochę trudne. Można to zrobić, dodając tar do miksu, ale jeśli jest to tylko jeden plik, a komputer B ma miejsce na dysku, aby go zatrzymać, o wiele łatwiej jest skopiować go w dwóch krokach.
af.

Możesz to zrobić trzy razy! ssh -t computer-b "ssh -t computer-c 'ssh computer-d'": D
gak


0

Jeśli używasz kluczy ssh, możesz wygenerować nowy klucz dla komputera B i użyć go do połączenia z A do B. Na komputerze B możesz dodać

command="ssh C" ssh-....

w ~/.ssh/authorized_keyspliku. Oznacza to, że ilekroć połączysz się z B za pomocą tego klucza ssh, wykona on ssh Cpolecenie.

Nie wiem czy to działa z scp.


0

Posługiwać się ProxyCommand

Zobaczyć man ssh_config. Polecam skorzystać z ProxyCommand. Weźmy twój oryginalny scenariusz:

  • Komputer A (twój komputer)
  • Komputer B (nazwa hosta proxy)
  • Komputer C (dostępny tylko przez SSH z komputera B)

Edytuj ~/.ssh/configz następującą zawartością.

Host computerb
    HostName <hostname or IP of Computer B>

Host computerc 192.168.35.*
    ProxyCommand ssh computerb nc -w 180 %h %p

Teraz będziesz mógł bez problemu dotrzeć do komputera C. np

ssh computerc

Zalety tej metody

Więcej Ochrony

Potrzebujesz tylko swojego klucza prywatnego, aby być na komputerze A (swoim komputerze). ncKomenda będzie działać jako serwer proxy, w którym SSH szyfrowania ruchu wskroś. Obejmuje to uwierzytelnianie. Rozprowadzanie klucza prywatnego na wielu serwerach jest bardzo złym pomysłem (ponieważ każdy serwer, na który został naruszony klucz prywatny, ostatecznie narusza klucz prywatny).

Pasuje do wielu miejsc docelowych

Można dopasować wiele komputerów docelowych za pomocą Host. Pojedynczy komputer lub dowolny komputer w określonej sieci (np. 192.168.35.0/24W powyższym przykładzie) do proxy przez komputer B. Służy również jako alias.

ssh 192.168.35.27

W powyższym przykładzie będzie proxy przez komputer B, aby uzyskać dostęp do adresu IP.

Łańcuchy proxy Daisy

Za pomocą tej metody można połączyć szereg dowolnych automatycznych serwerów proxy. np. możesz dodać komputer D, który jest dostępny tylko z komputera C i będzie działał transparentnie.

Host computerd
    ProxyCommand ssh computerc nc -w 180 %h %p

ssh computerdbędzie automatycznie proxy przez komputer C i komputer B w powyższych ssh_configprzykładach.


Używam ProxyJump zamiast ProxyCommand i działa dobrze. Wygląda na to, że jest teraz więcej opcji.
fgiraldeau
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.