ssh multi-hop… dostosowanie polecenia do pliku konfiguracyjnego ssh

10

Próbuję umieścić moją komendę ssh multi-hop w pliku ssh .ssh / config.

To jest mój wykres połączeń: laptop (jestem tutaj) ------> userver -------> stacja robocza

Umieściłem publiczne klucze SSH ssh w „userver” i „workstation”. W tej chwili mogę się połączyć, wpisując następującą linię:

ssh -A -t userserver@userver ssh -A userworkstation@workstation

Chciałbym jednak móc korzystać z możliwości pliku konfiguracyjnego w ~ / .ssh / config, aby osiągnąć ten sam efekt, ale używając jednego prostego polecenia, które pozwoliłoby mi również na szybkie kopiowanie przy pomocy 'scp'. Jedynym problemem jest to, że „userver” nie ma polecenia „nc” i nie mam tam administratora, tylko kontroluję mój folder domowy. Niemniej jednak próbowałem kilku rzeczy:

Mam ten plik konfiguracyjny na swoim laptopie (~ / .ssh / config):

# laptop config file
Host userver
Hostname userver_hostname
port 22
User server_user

Również inny plik konfiguracyjny w userver (~ / .ssh / config)

# userver config file
Host workstation
Hostname workstation_hostname
port 22
user workstation_username

Za pomocą tych plików konfiguracyjnych mogę się połączyć jako

ssh -A -t userver ssh -A workstation

co jest poprawą, ale niewystarczające. Próbowałem dodać innego hosta w konfiguracji moich laptopów, na przykład:

Host hop
ProxyCommand ssh -A -t userver ssh -A workstation

Potem, kiedy to zrobię

ssh hop

Otrzymuję następujące dane wyjściowe z błędami i nie mogę się połączyć:

Pseudo-terminal will not be allocated because stdin is not a terminal.
Pseudo-terminal will not be allocated because stdin is not a terminal.
-bash: line 1: $'SSH-2.0-OpenSSH_6.4\r': command not found

Jakieś pomysły?

labotsirc
źródło

Odpowiedzi:

6

Polecenie, którego potrzebujesz, to ProxyCommand.

Powinieneś umieścić w swoim pliku .ssh / config następujące linie:

  Host userver
  HostName userver.example.com
  .........    

  Host workstation 
  ProxyCommand ssh -q userver nc -q0 workstation 22

Teraz możesz połączyć się ze stacją roboczą PC za pomocą

  ssh worksation

Jeśli nie jest to jasne lub potrzebujesz więcej szczegółów, sugeruję przeczytanie tego doskonałego wprowadzenia do ssh multi-hopping.

Edytować:

zawsze możesz zdefiniować alias: w swoim pliku /home/your_name/.bashrc dodaj ten wiersz:

  alias ssh_workstation='ssh -A -t userver ssh -A -X workstation' 

(Wstawiłem -Xopcję, abyś mógł uruchamiać aplikacje graficzne na zdalnym serwerze, zobaczyć je lokalnie; jeśli nie chcesz, po prostu upuść -X).

MariusMatutiae
źródło
Cześć MariusMatutiae, próbowałem twojego rozwiązania, ale jak powiedziałem w oryginalnym poście, węzeł „userver” nie ma programu netcat (nc). Tak więc otrzymuję ten błąd: ssh workstation bash: nc: polecenie nie znaleziono ssh_exchange_identification: połączenie zamknięte przez zdalny host
labotsirc
Nie możesz tego zainstalować?
MariusMatutiae
Niestety nie, nie mam superużytkownika na „userver”, dlatego próbowałem alternatywnej metody. Nie rozumiem, jeśli to działa „ssh -A -t userver ssh -A stacja robocza”, dlaczego to samo umieszczenie na ProxyCommand nie działa?
labotsirc
1
@labotsirc Lekko zmieniłem swoją odpowiedź. Mam nadzieję, że może ci się przydać. Alternatywnie możesz spróbować zainstalować netcat lokalnie (tj. Tylko dla Ciebie!), Dodając w wierszu Proxycommand .... pełną ścieżkę do własnej kopii netcat. Nie jestem pewien, czy to działa z powodu uprawnień, ale możesz spróbować.
MariusMatutiae
Skopiowałem mój plik binarny netcat, usunąłem opcję -q0, ponieważ dawał błędy, a teraz działa! Dzięki
labotsirc,
10

Znalazłem następujące rozwiązanie, które działa znacznie lepiej niż przy użyciu netcat ( nc) jak w innym przykładzie. Z netcat moje połączenie było bardzo wolne i ciągle się zawieszało, dopóki nie uderzyłem w klawisze. Nie musisz też mieć zainstalowanego programu Netcat.

Dodaj następujące elementy do ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

Host workstation
  Hostname workstation
  User userworkstation
  ProxyCommand ssh userserver@userver -W %h:%p

Następnie możesz ssh w następujący sposób:

ssh workstation

Pamiętaj również, że powodem, dla którego ProxyCommandnie działa, jest to, że nie otrzymujesz tego, co ProxyCommanddziała. ProxyCommandnależy utworzyć potok, przez który sshmożna nawiązać połączenie SSL. Innymi słowy, polecenie musi uruchomić proces, w którym stdin i stdout łączą sshsię z sshdportem. W swojej konfiguracji tworzysz połączenie ssh, ProxyCommandktóre łączy sshsię z powłoką poleceń, a nie z sshdportem.

jcoffland
źródło