Correggere le impostazioni del file di configurazione ssh per eseguire il tunneling su una terza macchina


19

Sto cercando di collegarmi a un server tramite un bridge server. Finora sono stato in grado di farlo funzionare correttamente dalla shell dei comandi usando il seguente comando:

ssh -A -t bridge_userid@bridgemachine.com ssh -A remote_userid@remoteserver.com

Ma ho provato a inserirlo nel mio ~/.ssh/configfile e ho dei problemi. Ho provato:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -A -t bridge_userid@bridge_userid.com ssh -A remote_userid@%h

Ma quando lo faccio, ricevo il seguente messaggio di errore remoteserver.come non sono sicuro di cosa lo stia causando:

ksh: SSH-2.0-OpenSSH_6.8 ^ M: non trovato

So che quando accedo remoteserver.com, la mia shell è /usr/bin/ksh.

Ho provato ad aggiungere argomenti di percorso ai comandi ssh nel file di configurazione, ma non ha fatto differenza.

Qualche idea su cosa possa essere?


Non è così che ProxyCommanddeve essere usato. In genere viene utilizzato con netcat in cui ssh sta eseguendo il piping del suo output attraverso di esso e netcat agisce come tunnel verso la porta SSH del server remoto. È necessario un ProxyCommand simile a ssh -W %h:%p bridge_userid@bridgemachine.comse si desidera utilizzare quella funzione.
DanSut

Sfortunatamente sul mio bridge server non è installato netcat, quindi sto cercando di farlo funzionare in qualche altro modo. Ho pensato che se potesse funzionare dalla riga di comando, ci dovrebbe essere un modo per mettere le informazioni in un file di configurazione.
Eric B.

Nell'utilizzo della riga di comando che funziona ssh -A remote_userid@remoteserver.comcome comando da eseguire sulla macchina bridge, config non fornisce un modo per fornire comandi predefiniti. Quello che worksprovi a fare da solo, ma poi ssh cerca di usare il tuo ProxyCommandcome tunnel e inizia a lanciare il protocollo SSH su di esso dove c'è una shell in attesa all'altra estremità piuttosto che un sshd in ascolto per il protocollo SSH.
DanSut

@dansut ha funzionato benissimo. Grazie!
Eric B.

Risposte:


24

La risposta di Jakuje è giusta, ma da OpenSSH 7.3ora puoi usare -J ProxyJumpquale è più facile. Vedi le mie note:

OpenSSH 7.3o superiore

Usa ProxyJump. Come spiegato nel manuale:

-J [user @] host [: port]
Connettiti all'host di destinazione stabilendo prima una connessione ssh con l'host jump e quindi stabilendo un inoltro TCP verso la destinazione finale da lì. È possibile specificare più salti di salto separati da virgole. Questa è una scorciatoia per specificare una direttiva di configurazione ProxyJump.

~/.ssh/configEsempio di ProxyJump

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2_behind_server1
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyJump server1

Connesso con

ssh server2_behind_server1 -v

Aggiungi -vper output dettagliato

ProxyJump -JEsempio da riga di comando

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa

Connesso con

ssh server2 -J server1 -v

Oppure usa -o

ssh server2 -o 'ProxyJump server1' -v

OpenSSH 5.4o superiore

Utilizzare ProxyCommandcon-W

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 -W %h:%p

Connesso con

ssh server2 -v

Oppure usa -o

ssh server2 -o 'ProxyCommand ssh server1 -W %h:%p' -v

Soffietto OpenSSH 5.4

~/.ssh/config

Host server1
  Hostname server1.example.com
  IdentityFile ~/.ssh/id_rsa

Host server2
  Hostname server2.example.com
  IdentityFile ~/.ssh/id_rsa
  ProxyCommand ssh server1 nc %h %p 2> /dev/null

Connesso con:

ssh server2 -v

Oppure usa -o

ssh server2 -o 'ProxyCommand ssh server1 nc %h %p 2> /dev/null' -v

fonti

-Jaggiunto in OpenSSH 7.3

  • ssh (1): aggiungi un'opzione ProxyJump e il corrispondente flag della riga di comando -J per consentire l'indirizzamento semplificato attraverso uno o più bastioni SSH o "jump host".

-Waggiunto in OpenSSH 5.4

  • Aggiunta una 'modalità netcat' a ssh (1): "ssh -W host: port ..." Questo collega stdio sul client a una singola porta forward sul server. Ciò consente, ad esempio, l'utilizzo di ssh come ProxyCommand per instradare le connessioni tramite server intermedi. bz # 1618

3

Non hai bisogno netcatsul tuo ponte. Come DanSut ha proposto nei commenti, è possibile utilizzare ssh -Winvece l'opzione della riga di comando, questa configurazione dovrebbe funzionare per te:

Host axp
  User          remote_userid
  HostName      remoteserver.com
  IdentityFile  ~/.ssh/id_rsa.eric
  ProxyCommand ssh -AW %h:%p bridge_userid@bridge_userid.com

Ha funzionato. Grazie. Non sono sicuro del perché, ma sono sicuro di averlo già provato una volta, ma ho provato di nuovo con successo. Grazie.
Eric B.
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.