ssh multi-hop ... adattando il comando al file di configurazione ssh


10

Sto cercando di inserire il mio comando ssh multi-hop nel file ssh .ssh / config.

Questo è il mio grafico di connessione: laptop (sono qui) ------> userver -------> workstation

Ho messo le chiavi rsa pubbliche ssh in "userver" e "workstation". In questo momento posso collegarmi digitando questa riga:

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

Vorrei comunque essere in grado di usare le capacità del file di configurazione in ~ / .ssh / config per ottenere lo stesso effetto ma usando un semplice comando, che mi permetterebbe anche di fare una copia veloce con 'scp'. L'unico problema è che 'userver' non ha il comando "nc" e non ho un superutente lì, solo il controllo della mia cartella home. Tuttavia, ho provato alcune cose:

Ho questo file di configurazione nel mio laptop (~ / .ssh / config):

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

Anche un altro file di configurazione nell'utente (~ / .ssh / config)

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

Con questi file di configurazione posso collegarmi come

ssh -A -t userver ssh -A workstation

che è un miglioramento, ma non sufficiente. Ho provato ad aggiungere un altro host nella configurazione del mio laptop, in questo modo:

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

Quindi, quando lo faccio

ssh hop

ottengo il seguente output con errori e non riesco a connettermi:

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

Qualche idea?

Risposte:


6

Il comando di cui hai bisogno è ProxyCommand.

Dovresti inserire nel tuo file .ssh / config queste righe:

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

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

Ora è possibile connettersi alla workstation PC tramite

  ssh worksation

Se questo non è chiaro o vuoi maggiori dettagli, ti suggerisco di leggere questa eccellente introduzione al multi-hopping di ssh.

Modificare:

puoi sempre definire un alias: nel tuo file /home/your_name/.bashrc, aggiungi questa riga:

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

(Ho inserito l' -Xopzione in modo da poter eseguire applicazioni grafiche sul server remoto, e vederle localmente; se non lo desideri, basta rilasciare -X).


Ciao MariusMatutiae, ho provato la tua soluzione ma come ho detto nel post originale il nodo 'userver' non ha il programma netcat (nc). Quindi ottengo questo errore: workstation ssh bash: nc: comando non trovato ssh_exchange_identification: connessione chiusa dall'host remoto
labotsirc

Non puoi installarlo?
MariusMatutiae,

Sfortunatamente no, non ho un superutente su "userver", ecco perché stavo provando un metodo alternativo. Non capisco, se funziona "ssh -A -t userver ssh -A workstation", perché lo stesso messo su ProxyCommand no?
labotsirc,

1
@labotsirc Ho leggermente modificato la mia risposta. Spero che tu possa trovarlo utile. In alternativa, puoi provare a installare netcat localmente (cioè solo per te!), Aggiungendo nella riga Proxycommand .... il percorso completo della tua copia di netcat. Non sono sicuro che funzioni, a causa delle autorizzazioni, ma potresti provarlo.
MariusMatutiae,

Ho copiato il mio binario netcat, rimosso l'opzione -q0 perché stava dando errori, e ora funziona! Grazie
labotsirc il

10

Ho trovato che la seguente soluzione funziona molto meglio dell'uso di netcat ( nc) come nell'esempio seguente. Con netcat la mia connessione è stata molto lenta e si è bloccata ripetutamente fino a quando non ho premuto alcuni tasti. Inoltre non è necessario disporre di netcat installato.

Aggiungi quanto segue al tuo ~/.ssh/config:

Host *
  ServerAliveCountMax 4
  ServerAliveInterval 15

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

Quindi puoi ssh in questo modo:

ssh workstation

Si noti inoltre che il motivo per cui ProxyCommandnon funziona è perché non si ottiene ciò che ProxyCommandfunziona. ProxyCommanddeve creare una pipe su cui è sshpossibile stabilire una connessione SSL. In altre parole, il comando deve avviare un processo in cui stdin e stdout si collegano ssha una sshdporta. Nella tua configurazione, stai creando una connessione ssh con la ProxyCommandquale si connette sshalla shell dei comandi piuttosto che a una sshdporta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.