Jak ssh do serwera, do którego nie mogę bezpośrednio dotrzeć?


17

Kontekst

Używam Ubuntu Desktop jako mojej podstawowej maszyny, którą nazywam D. Chcę połączyć się z serwerem S przez ssh, ale zapora mnie blokuje.

Mam dostęp do serwera S, bardzo uciążliwą ścieżką, obejmującą maszynę wirtualną Windows i PuTTY . To sprawia, że ​​praca z tym serwerem jest wyjątkowo denerwująca: zupełnie inne środowisko, kopiowanie / wklejanie nie działa, nie mogę poprawnie korzystać z pulpitu podczas połączenia z nim (Alt-Tab jest uszkodzony przez maszynę wirtualną) itp.

Sprawdziłem, że mogę ssh z serwera S na mój komputer stacjonarny D (odwrotnie niż to, czego potrzebuję).

Czy mogę w jakiś sposób zainicjować „przekierowanie portów” lub podobne z serwera, aby móc ssh na serwer z mojego pulpitu?


2
Skacz gospodarzy ... muszę ich pokochać !!!
RonJohn

Możliwy duplikat tunelu SSH z A-> B-> C
muru

@muru to inny scenariusz, ale oczywiście związany (w końcu chodzi o tunelowanie!). W tym przypadku chcę sfałszować D->Spoprzez nadużycieS->D
dangonfast

Odpowiedzi:


32

Aby skonfigurować tunel SSH ze zdalnego serwera na komputer lokalny, możesz użyć następującego polecenia:

$ ssh -f -N -R 1234:localhost:22 user@your_machine_ip

Po skonfigurowaniu tunelu możesz po prostu ssh na zdalnym serwerze za pomocą następującego polecenia:

$ ssh -p 1234 user@localhost

Pamiętaj, że musisz skonfigurować klucze ssh do automatycznego logowania (bez pytania o hasło). Jeśli chcesz interaktywnie utworzyć tunel SSH, możesz usunąć opcje -f -N. Aby uzyskać więcej informacji, man ssh.


W jaki sposób tunel przechodzi przez maszynę wirtualną z systemem Windows? (Tam, gdzie pracuję, jest wiele warstw zapór ogniowych i tylko kilka portów jest otwartych.)
RonJohn

@RonJohn Wierzę, że wykorzystuje to fakt, że (dla OP) ssh-sing z serwera na pulpit działa, więc ustawia to tunel z serwera (port 22) bezpośrednio do komputera stacjonarnego (port 1234), którego można użyć połączyć się z ssh na serwerze (który używa portu 22). Maszyna wirtualna z systemem Windows służy wyłącznie do konfigurowania tunelu. (popraw mnie, jeśli się mylę)
pizzapants184

@dangonfast Oprócz odpowiedzi możesz znaleźć następujący dokument o wartości: spencerstirling.com/computergeek/sshtunnel.html
Pryftan

@RonJohn Dokument, do którego właśnie się przyłączyłem, może również pomóc odpowiedzieć na to pytanie, przynajmniej jeśli chodzi o wiele warstw zapór ogniowych itp. (Jeśli pamięć dobrze mi służy - minęło bardzo dużo czasu, gdy ją przeczytałem .. Po prostu pamiętam, że miałem link sprzed lat).
Pryftan

1
@ pizzapants184 rzeczywiście, to był mój punkt wyjścia: ssh z S -> D, więc chcę nadużyć tego, aby skutecznie wykonywać D -> S, nawet jeśli nie jest to bezpośrednia praca. Dlaczego sieć jest tak skonfigurowana, jest czymś, co mnie ucieka. Może to być celowe lub
błędna

5

Jeśli korzystasz z nowszej wersji OpenSSH (7.3+), możesz użyć tej, ProxyJumpktóra wszystko magicznie łączy:

ssh -J windows_machine remote_server

Które w twoim ~/.ssh/configwyglądzie to:

Host remote_server
        HostName remote_server
        ProxyJump windows_machine
        User myname

ProxyJumpobsługuje pełną składnię SSH, więc jeśli jesteś jimwłączony windows_serveri używa portu 2222dla ssh. remote_serverjest na IP 192.168.0.110z windows_serverczym można napisać:

Host remote_server
        HostName 192.168.0.110
        ProxyJump jim@windows_machine:2222
        User myname

I wciąż po prostu biegnij, ssh remote_serveraby się tam dostać.


Jeśli korzystasz ze starszej wersji SSH, użyj ProxyCommand - pozwala to powiedzieć SSH, aby najpierw uruchomiło polecenie ustanowienia połączenia proxy, przed uruchomieniem rzeczywistego polecenia SSH.

ssh -o ProxyCommand='ssh -W %h:%p windows_machine' remote_server

Wykorzystuje to opcję SSH -W , która jest skrótem dla bardziej tajemniczej składni netcat .

Zwróć uwagę, że ponieważ podczas uruchamiania ssh remote_serverjesteś teraz na komputerze windows_machine, musisz upewnić się, że używasz adresu IP remove_server z pola skoku zamiast adresu IP z komputera - mogą one być takie same.

Następnie możesz dodać tę dyrektywę do swojego ~/.ssh/configpliku:

Host remote_server
  HostName remote_server
  User myname
  ProxyCommand ssh -W %h:%p windows_machine

Oznacza to, że jeśli remote_server jest to inna maszyna, jak widać, windows_machinemożesz ją ustawić w konfiguracji i nadal używać ssh remote_server.


1
To jest znacznie lepsza odpowiedź.
Robert Riedl

Chociaż jest to przydatne, nie odpowiada na zadawane pytanie. OP stwierdza, że ​​nie mogą SSH z D-> S (co chcą), ale mogą SSH z S-> D. Pomiędzy nimi nie ma serwerów proxy ssh (zamiast tego jest maszyna wirtualna z systemem Windows, prawdopodobnie dostępna przez RDP).
mbrig

@mbrig rzeczywiście. Nie wypróbowałem tego rozwiązania, ale zdziwiłbym się, gdyby
zadziałało

Ale mówisz, że możesz dostać się do komputera z systemem Windows - z tego zrozumiałem, że może on działać jako pole przeskoku między tobą a drugą maszyną.
Boris the Spider

1
Mogę zalogować się do komputera z systemem Windows za pomocą zastrzeżonego narzędzia (VMWare Horizon). Nigdy nie powiedziałem, że mogę to zrobić. Testowałem to nawet przed opublikowaniem tego pytania, instalując serwer ssh towarzyszący Putty (zapomniałem nazwy), ale moje testy zakończyły się niepowodzeniem. Zakładam, że ssh jest również zaporą ogniową w podsieci systemu Windows.
dangonfast

1

Zamiast próbować ominąć rzeczy i stworzyć zawiłą ścieżkę, czy nie możesz po prostu poprosić o zezwolenie SSH z pulpitu na serwer? Jeśli masz taką potrzebę i powinieneś uzyskiwać dostęp do serwera, nie widzę powodu, dla którego miałbyś odmówić.


Chcesz wyjaśnić opinię? Pytanie brzmi: „Jak połączyć ssh z serwerem, do którego nie mogę bezpośrednio dotrzeć?” więc moja odpowiedź na wprowadzenie reguły zapory ogniowej w celu jej zezwolenia jest ważna. Jest to również właściwy sposób obchodzenia go zgodnie z dobrą praktyką bezpieczeństwa.
Solarflare

Jestem w pierwszym tygodniu trzymiesięcznej umowy dużego klienta korporacyjnego. Nie dostałem laptopa (używam mojego) i ledwo biurka. Mam dziesiątki poświadczeń do korzystania z różnych usług i ledwo udaje mi się to wszystko pogodzić. To, co chcę zrobić, nie jest trudnym wymogiem do wykonania mojej pracy: mogę pracować na maszynie wirtualnej i to właśnie powie mi mój szef, jeśli zacznę zadawać śmieszne pytania. Albo wskaże mi Help Desk, który wyrzuci puszkę w dół na następne kilka tygodni / miesięcy.
dangonfast

Dla mnie praca na maszynie wirtualnej z łatwością oznacza utratę produktywności o 50%, więc chcę tego uniknąć w jak największym stopniu. Mimo to uwielbiam ten koncert!
dangonfast

1
Mogę to zrozumieć. Z mojego doświadczenia wynika, że ​​„duzi klienci korporacyjni” często denerwują się, gdy kontrahenci omijają zapory ogniowe i zasady, aby wykonywać swoją pracę, nawet jeśli ma to na celu altruizm. Fakt, że możesz SSH z serwera na pulpit, mówi mi, że albo nie jesteś w stanie wykonać odwrotnej czynności, to przeoczenie lub coś, co zostało wprowadzone w określonym celu.
Solarflare

4
Jest to jedyne prawdziwe rozwiązanie, jeśli chcesz uniknąć ryzyka zwolnienia za obejście polis ... Przynajmniej porozmawiaj z osobami odpowiedzialnymi przed użyciem rozwiązania Khaleds, aby wiedzieli, co zamierzasz.
Sven
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.