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?
źródło
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
:Następnie możesz ssh w następujący sposób:
Pamiętaj również, że powodem, dla którego
ProxyCommand
nie działa, jest to, że nie otrzymujesz tego, coProxyCommand
działa.ProxyCommand
należy utworzyć potok, przez któryssh
można nawiązać połączenie SSL. Innymi słowy, polecenie musi uruchomić proces, w którym stdin i stdout łącząssh
się zsshd
portem. W swojej konfiguracji tworzysz połączenie ssh,ProxyCommand
które łączyssh
się z powłoką poleceń, a nie zsshd
portem.źródło