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.

zdrowie psychiczne
źródło

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.

af.
źródło
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

Prawdopodobnie chcesz użyć ProxyCommand SSH: http://benno.id.au/blog/2006/06/08/ssh_proxy_command

Rory
źródło
Nie mogę znaleźć sposobu, aby to zadziałało, ponieważ nie mam hasła do komputera C i wydaje się, że takie podejście wymaga tego. Otwarty na sugestie, ponieważ takie podejście wydaje się bardziej eleganckie.
poczytalność
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.

Rory
źródło
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.

Sam Gleske
źródło
Używam ProxyJump zamiast ProxyCommand i działa dobrze. Wygląda na to, że jest teraz więcej opcji.
fgiraldeau