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
final
la sezione in ~/.ssh/config
non è utilizzata.
Dettagli connessione (1)
ssh -t inter ssh user2@final.com
può essere visualizzato come segue
local# ssh inter
inter# ssh user2@final.com
local
sta solo "parlando" inter
. Non esiste una connessione ssh diretta o indiretta tra local
e final
. local
sta 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 ProxyCommand
prendono un ulteriore passo avanti. Salta il passaggio per creare una porta locale e connettersi ad essa.
Un client ssh eseguirà qualsiasi comando dato dietro ProxyCommand
e 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 22
si 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é nc
viene 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 ProxyCommand
perché 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 nc
su 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 inter
e 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 inter
già 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.pub
lì.
ssh -t
, ma quello che mi piacerebbe fare è simulare esattamente il comportamento che ho usandossh -t
usando solo la configurazione sul.ssh/config
.