METODA 1 (użyj klawisza ssh na inter)
Jeśli chcesz zachować przepływ uwierzytelniania
local -- authenticate --> inter -- authenticate (ask password) --> final
Nie można tego zrobić za pomocą .ssh / config proxyhost.
Potrzebujesz aliasu powłoki bash (mam nadzieję, że używasz bash).
W ~/.bashrcdodaj następujący wiersz
alias ssh-final='ssh -t inter ssh user2@final.com'
W wierszu polecenia wpisz następujące
ssh-final
finalsekcja w ~/.ssh/confignie jest używany.
Szczegóły połączenia (1)
ssh -t inter ssh user2@final.com można wyświetlić w następujący sposób
local# ssh inter
inter# ssh user2@final.com
localtylko „rozmawia” z inter. Nie ma bezpośredniego ani pośredniego połączenia ssh pomiędzy locali final. localwyświetla tylko wynik działania ssh user2@final.com.
METODA 2 (użyj klucza ssh na komputerze lokalnym)
Uwierzytelnianie za pomocą tego samego klucza SSH
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Skopiuj lokalnie ~/.ssh/id_ras.pub do
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Szczegóły połączenia (2)
tunelowanie ssh
Zanim przejdziemy do szczegółów ProxyCommand, spójrzmy na następujący przykład
Krok 1, w oknie terminala 1
local# ssh inter -L 2000:final.com:22
Krok 2, w oknie terminala 2
local# ssh localhost -p 2000
W terminalu 1 tunel jest ustawiony między portem lokalnym 2000 a portem final.com 22. Wszystko, co zostanie wysłane do portu lokalnego 2000, zostanie przekierowane do portu final.com 22 i odwrotnie.
W terminalu 2 ssh łączy się z lokalnym portem 2000, ale w rzeczywistości komunikuje się z portem final.com 22, którym jest sshd.
Dzięki tunelowaniu lokalny klient ssh w kroku 2 jest bezpośrednio połączony z final.com sshd.
„Wyjście” lokalnego portu 2000 to „surowy” ruch demona ssh.
Częstym zastosowaniem takiego tunelu jest dostęp do wewnętrznego serwera WWW lub serwera e-mail. Poniżej znajduje się przykład serwera WWW
local# ssh inter -L 2000:final.com:80
W przeglądarce użyj następującego adresu URL
http://localhost:2000
Dwa punkty końcowe tunelu to lokalny port 2000 i final.com port 80.
Ruch przychodzący i wychodzący z punktu końcowego tunelu „AS IS”. Nazwijmy ten „surowy” ruch.
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
ProxyCommandWziąć to krok dalej. Pomija etap tworzenia portu lokalnego i łączy się z nim.
Klient ssh wykona dowolną komendę ProxyCommandi potraktuje wynik tej komendy jako „nieprzetworzony” ruch. Trzyma lokalny punkt końcowy, a następnie nawiązuje z nim połączenie ssh.
Dlaczego jedna praca nie działa?
Następujące polecenie
ssh inter nc final.com 22
w zasadzie oznacza (1) połączenie z inter, a następnie (2) włączenie interpolecenia uruchomienia nc final.com 22.
nc - arbitrary TCP and UDP connections and listens
Więc nc final.com 22będzie łączyć się final.com portu 22, wydrukować cały ruch przychodzący do stdout, stdin i wysłać wszystko na drugą stronę. Jest to „tunel” między nc stdin / out a portem final.com 22.
Ponieważ ncjest uruchamiany w ramach sesji ssh, cały jego stdout jest przekazywany z powrotem do klienta ssh jako „surowy” ruch. A klient ssh może przekazywać ruch do nc stdin, który skończy na porcie final.com 22.
Przez powyższy „tunel” lokalny klient ssh rozpocznie sesję ssh final.combezpośrednio.
Następujące polecenie
ssh -t inter ssh user2@final.com
nie działa, ProxyCommandponieważ wyjście z niego nie jest „surowym” ruchem z demona ssh. Jest to standardowe wyjście klienta ssh . Rozmowa z klientem oznacza brak działalności.
Uwierzytelnianie za pomocą innego klucza SSH (oryginalna konfiguracja OP)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Skopiuj lokalnie ~/.ssh/id_ras.pub do
/home/user1/.ssh/authorized_keys in `inter`
Skopiuj lokalnie ~/.ssh/id_ras_2.pub do
/home/user2/.ssh/authorized_keys in `final`
Oba powyższe umożliwią następujące użycie
local# ssh final
Dodatkowe sprawdzanie
Używaj pełnych słów
local# ssh -v final
To powinno pomóc w identyfikacji problemu ssh.
Sprawdź nc
ProxcyCommandwykonuje ncsię inter. Sprawdź, czy ncjest faktycznie dostępny w dniuinter .
local# ssh inter
inter# nc final.com 22
Sprawdź, czy klucz RSA jest poprawnie skonfigurowany
Jeśli mają być używane różne klucze interi final, na komputerze lokalnym powinny istnieć następujące pliki
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Ponieważ możesz interjuż ssh , sprawdź konfigurację klucza na final. Z lokalnego komputera
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Powinieneś zobaczyć id_rsa_2.pubtam zawartość .
ssh -t, ale chciałbym dokładnie symulować zachowanie, które mam przyssh -tużyciu tylko konfiguracji w.ssh/config.