Szukam prostej drogi do SSH z mojego komputera lokalnego, A, przez proxy, B, do hosta docelowego, C. Klucz prywatny, który idzie z kluczem publicznym na C, znajduje się na B i nie mogę umieść ten klucz na moim komputerze lokalnym. Jakieś wskazówki?
Chciałbym też móc to zrobić za pomocą ~ / .ssh / config.
Dzięki!
Odpowiedzi:
Schematyczny:
Warunki wstępne:
A
działa ssh-agent;A
może uzyskać dostępB
;B
może uzyskać dostępC
;A
Klucz publiczny ssh jest obecny wB:~/.ssh/authorized_keys
B
Klucz publiczny ssh jest obecny wC:~/.ssh/authorized_keys
W
~/.ssh/config
dniuA
, dodaćJeśli twój prywatny klucz ssh na B znajduje się w niestandardowej lokalizacji, dodaj jego ścieżkę po
ssh-add
.Teraz powinno być w stanie uzyskać dostęp
C
zA
:źródło
ProxyJump B
. źródło: wikibooksnc
?ForwardAgent yes
przed tymProxyJump
poleceniem.Sprawdź, czy działa następujące.
Użyj następującego polecenia, jeśli chcesz użyć klucza zapisanego na B.
Podajemy tutaj polecenie
ssh -i /path/to/identity_on_B C
do wykonania na B zamiast powłoki logowania.źródło
Rozpracowałem to teraz. Oto rozwiązanie, które jest dość proste. Powinienem był to zobaczyć wcześniej:
~ / .ssh / config:
„B” to serwer proxy, przez który przeskakujesz. Powinien być skonfigurowany tak, jak zwykle konfigurowałbyś dostęp do serwera.
„C” to host docelowy. Musi być skonfigurowany do używania „B” w procesie połączenia. Plik tożsamości w „C” jest ścieżką do klucza ssh w „B”. ProxyCommand używa Netcat do otwarcia połączenia z „C” z „B”. Netcat lub nc będzie musiał zostać zainstalowany na „B”.
Mam nadzieję, że to pomaga innym.
źródło
Napisałem prosty skrypt, aby w zasadzie wypisać moje klucze ssh w zdalnej instancji, a następnie dodać ten, który wybrałem do mojego lokalnego agenta ssh. To nie jest bardzo czyste, ale pozwala mi przechowywać wszystkie klucze w zdalnej lokalizacji, a nie lokalnie.
Oto skrypt, jeśli ktoś jest zainteresowany:
źródło
źródło
Do zrobienia:
ssh someuser@IP_D
takie, że
A -> B-> C -> D
gdzie A jest gospodarzem, na którym jesteś,edytuj lokalną ~ / .ssh / config w następujący sposób:
Ta odpowiedź jest oparta na wybranej odpowiedzi. Musiałem dowiedzieć się, jak różni użytkownicy pasują do całego scenariusza.
To działa dla mnie. HTH.
źródło
Odpowiedź Snowball bardzo pomogła. Wprowadziłem jednak pewne zmiany w poleceniu i chciałem wyjaśnić, jak to działa. Biorąc pod uwagę tę sytuację:
Zmodyfikuj
~/.ssh/config
plik i dodaj hosta,B
przez który chcesz przeskoczyć, tak jak normalnie skonfigurujesz hosta:Następnie dodajesz hosta
C
, na którym chcesz skończyć:Uwaga
ProxyCommand
, gdzie:ssh -T -q
wskazuje, że nie powinien przydzielać pseudo-TTY (-T
) i być cichym (-q
);B
dodajemy klucz do kluczy SSHA
przezssh-add
;-o 'ForwardAgent yes'
.ssh-add -t 1
wskazuje, że chcę, aby klucz został dodany tylko na 1 sekundę potrzebną do uwierzytelnienia na ostatecznym hoście C;nc %h %p
inicjujenetcat
połączenie z hostem końcowym%h
na porcie%p
(oba zostaną wypełnione przez SSH na podstawie informacji zawartych w~/.ssh/config
pliku).Jeśli musisz określić niestandardowy klucz
B
do użycia, możesz to zrobić, modyfikującssh-add
część:źródło