Chiedi a ssh di risolvere i nomi host da config quando usi ProxyCommand e la modalità netcat


16

Sto tentando di impostare alcune opzioni universali per far rimbalzare le connessioni ssh. Ecco il mio ~/.ssh/configfile, abbreviato:

Host *%via
  ProxyCommand ssh gateway -W $(echo %h | cut -d%% -f1) %p

Host gateway
  HostName gateway.example.com
  User username
  ForwardAgent yes
  IdentityFile keypathg

Host target
  User username
  HostName target.example.com
  IdentityFile keypatht

Quando utilizzo *%viautilizzando gli Hostalias, ottengo:

% ssh -vvv target%via
OpenSSH_5.9p1, OpenSSL 0.9.8y 5 Feb 2013
debug1: Reading configuration data /Users/myuser/.ssh/config
debug1: /Users/myuser/.ssh/config line 5: Applying options for *
debug1: /Users/myuser/.ssh/config line 12: Applying options for *%via
debug1: Reading configuration data /etc/ssh_config
debug1: /etc/ssh_config line 20: Applying options for *
debug1: auto-mux: Trying existing master
debug1: Control socket "/Users/myuser/.ssh/tmp/target%via_22_myuser" does not exist
debug2: ssh_connect: needpriv 0
debug1: Executing proxy command: exec ssh -A gateway -W $(echo target%via | cut -d% -f1):22
debug1: permanently_drop_suid: 501
debug1: identity file /Users/myuser/.ssh/id_rsa type -1
debug1: identity file /Users/myuser/.ssh/id_rsa-cert type -1
debug1: identity file /Users/myuser/.ssh/id_dsa type -1
debug1: identity file /Users/myuser/.ssh/id_dsa-cert type -1
ssh_exchange_identification: Connection closed by remote host

Tuttavia, se lo utilizzo

% ssh target.example.com%via

Ho colpito il server di destinazione, ma come utente sbagliato e senza autenticazione pubkey.

Penso che la mia domanda, a questo punto, sia questo metodo di rimbalzo, quando lo utilizzo ForwardAgent, passa attraverso il mio config / ambiente ssh intero, o solo le chiavi. Se solo chiavi, il primo può essere utilizzato in qualche modo?

La mia versione ssh è 5.9v1, il gateway è 5.9v1 e la destinazione è 5.3p1. Credo che sia -Wstato introdotto in 5.4, ma non dovrebbe importare per l'ultima casella in linea? l'utilizzo della scuola superiore ncnon sembra diverso.

Ho verificato che posso ssh manualmente per ogni casella della riga. In questo modo si indica che le informazioni sull'alias del nome host non vengono passate, come quando sul gateway non posso ssh targetma posso ssh target.example.com. Funziona con pubkey auth. il gateway e la destinazione hanno per inciso lo stesso nome utente, motivo per cui funziona se non viene inviata alcuna configurazione.

Se ForwardAgento una configurazione simile non è in grado di inviare queste informazioni, qual è il modo più sicuro per aggirarle, mantenendo un .ssh / config sul gateway con queste informazioni?

Risposte:


14

Wow, grazie per aver posto questa domanda. Trovo raro vedere qualcuno sfruttare appieno SSH e questa domanda colpisce in un paio di aree.

Questo non è un ProxyCommandproblema. Indica ProxyCommandsemplicemente al client ssh locale di fare qualcosa in preparazione prima di provare a parlare con il client remoto. Sì, nel nostro caso, parliamo con un'altra sessione ssh, ma quella sessione, con -Wsemplicemente prende il nostro input e lo inoltra a un'altra macchina. Puoi pensare che quella sessione preparatoria di SSH sia completamente indipendente. Analogia inevitabile con la macchina: la tua macchina è la stessa macchina, indipendentemente dal fatto che tu abbia dovuto guidare un traghetto per andare dal punto A al punto B.

Questo non è un ForwardAgentproblema. ForwardAgentil client locale fornisce una funzione che rende disponibili le chiavi locali nell'ambiente della sessione remota. Non sei passato a stabilire la sessione remota.

È un .ssh/configproblema di formato. Nota la seconda e la terza riga di debug1. Elencano quali stanze Host vengono applicate dal tuo .ssh/config. Si nota che $ ssh target.example.com%viafunziona, ma come nome utente e chiave errati. Bene, la stanza per Host targetnon viene letta (che fornirebbe il nome utente e il file chiave corretti). Quali stanze vengono utilizzate? *e *%via.

Come ottenere queste opzioni per passare? Bene, abbastanza interessante, il carattere jolly corrisponde a 0 stringhe di lunghezza. Host target*abbinerà target, target%via, target.example.come target.example.com%via.

E così fai la domanda, impostando un aiuto .ssh/configsulla gatewaymacchina. No, non lo sarebbe. Non sarebbe mai stato letto. Sta succedendo tutto dalla nostra macchina locale.

Tutto quello che ho spiegato, risponde solo perché $ ssh target.example.com%vianon funziona.

Tu preferisci $ ssh target%via. Giustamente, è più conveniente. La forma breve non riesce perché, come nome host, targetnon viene trovato; non si sta risolvendo. Perché non è non è ssh fuoriuscendo: ssh: Could not resolve hostname target: Name or service not known? Perché ProxyCommandè già stato stabilito con successo. Sono stati creati elementi di una connessione ssh, ma l'errore dell'hostname sta accadendo dove non si aspetta, e quindi sta esplodendo con il messaggio più generico. Vorrei presentare una segnalazione di bug su questo, per aiutare a identificare dove le informazioni di debug potrebbero essere migliorate.

Commento finale:

Mi piace la Host *%viasintassi. È pulito, ma flessibile. Avevo visto in precedenza Host *+*e utilizza sia la prima che l'ultima parte del %h(ost)per determinare dove andare. Ma ci vuole un po 'più di sforzo per distrarti. link: http://wiki.gentoo.org/wiki/SSH_jump_host

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.