METODO 1 (utilizzare il tasto ssh sull'inter)
Se si desidera conservare il flusso di autenticazione
local -- authenticate --> inter -- authenticate (ask password) --> final
Questo non può essere fatto con .ssh / config proxyhost.
Quello di cui hai bisogno è bash shell alias (spero che tu stia usando bash).
In ~/.bashrc, aggiungi la seguente riga
alias ssh-final='ssh -t inter ssh user2@final.com'
Nel prompt dei comandi, basta digitare quanto segue
ssh-final
finalla sezione in ~/.ssh/confignon è utilizzata.
Dettagli connessione (1)
ssh -t inter ssh user2@final.com può essere visualizzato come segue
local# ssh inter
inter# ssh user2@final.com
localsta solo "parlando" inter. Non esiste una connessione ssh diretta o indiretta tra locale final. localsta solo visualizzando l'output di ssh user2@final.com.
METODO 2 (utilizzare il tasto ssh sul locale)
Autenticazione con la stessa chiave ssh
Host inter
User user1
HostName inter.example.com
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Copia locale ~/.ssh/id_ras.pub in
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Dettagli connessione (2)
tunneling ssh
Prima di entrare nel dettaglio di ProxyCommand, diamo un'occhiata al seguente esempio
Passaggio 1, sulla finestra del terminale 1
local# ssh inter -L 2000:final.com:22
Passaggio 2, sulla finestra del terminale 2
local# ssh localhost -p 2000
Nel terminale 1, viene installato un tunnel tra la porta locale 2000 e la porta 22 di final.com. Qualsiasi cosa inviata alla porta locale 2000 verrà inoltrata alla porta 22 di final.com e viceversa.
Nel terminale 2, ssh si collega alla porta locale 2000, ma in realtà sta comunicando con la porta 22 di final.com, che è la sshd.
Con il tunneling, il client ssh locale nel passaggio 2 è collegato direttamente a sshd final.com.
L '"output" della porta locale 2000 è il traffico demone ssh "raw".
L'uso comune di tale tunnel è l'accesso al server Web interno o al server di posta elettronica. Di seguito è riportato un esempio per il server Web
local# ssh inter -L 2000:final.com:80
Nel browser utilizzare il seguente URL
http://localhost:2000
I due punti finali del tunnel sono la porta locale 2000 e la porta 80 di final.com.
Traffico in entrata e in uscita dal punto finale del tunnel "COSÌ COM'È". Chiamiamo quel traffico "grezzo".
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Il ProxyCommandprendono un ulteriore passo avanti. Salta il passaggio per creare una porta locale e connettersi ad essa.
Un client ssh eseguirà qualsiasi comando dato dietro ProxyCommande tratterà l'output di quel comando come traffico "grezzo". Sta trattenendo il punto finale locale e quindi avvia una connessione ssh con esso.
Perché uno lavora l'altro no?
Il seguente comando
ssh inter nc final.com 22
sostanzialmente significa (1) connettersi a inter, quindi (2) su inter, eseguire il comando nc final.com 22.
nc - arbitrary TCP and UDP connections and listens
Quindi nc final.com 22si collegherà alla porta 22 di final.com, stampa tutto il traffico in arrivo su stdout e invia tutto lo stdin dall'altra parte. È un "tunnel" tra nc stdin / out e la porta 22 di final.com.
Poiché ncviene eseguito all'interno della sessione ssh, tutto il suo stdout viene restituito al client ssh, come traffico "non elaborato". E il client ssh può trasferire il traffico in nc stdin, che finirà sulla porta 22 di final.com.
Attraverso il "tunnel" sopra, il client ssh locale avvierà direttamente una sessione ssh final.com.
Il seguente comando
ssh -t inter ssh user2@final.com
non funziona ProxyCommandperché il suo out non è traffico " non elaborato " da un demone ssh. È lo stdout di un client ssh . Parlare con un cliente significa niente affari.
Autenticazione con chiave ssh diversa (configurazione originale OP)
Host inter
User user1
HostName inter.com
IdentityFile ~/.ssh/id_rsa
Host final
User user2
HostName final.com
IdentityFile ~/.ssh/id_rsa_2
ProxyCommand ssh inter nc %h %p
Copia locale ~/.ssh/id_ras.pub in
/home/user1/.ssh/authorized_keys in `inter`
Copia locale ~/.ssh/id_ras_2.pub in
/home/user2/.ssh/authorized_keys in `final`
Entrambi i precedenti consentiranno il seguente utilizzo
local# ssh final
Controllo aggiuntivo
Usa verboso
local# ssh -v final
Ciò dovrebbe aiutare a identificare il problema ssh.
Controlla nc
ProxcyCommandè in esecuzione ncsu inter. Controlla se ncè effettivamente disponibile su inter.
local# ssh inter
inter# nc final.com 22
Verificare che la chiave rsa sia impostata correttamente
Se si devono usare chiavi diverse per intere final, dovrebbero esistere i seguenti file nel computer locale
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Dal momento che puoi intergià fare ssh , controlla l'impostazione della chiave su final. Dalla tua macchina locale
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Dovresti vedere il contenuto di id_rsa_2.publì.
ssh -t, ma quello che mi piacerebbe fare è simulare esattamente il comportamento che ho usandossh -tusando solo la configurazione sul.ssh/config.