MÉTHODE 1 (utilisez la touche ssh sur inter)
Si vous souhaitez conserver le flux d'authentification
local -- authenticate --> inter -- authenticate (ask password) --> final
Cela ne peut pas être fait avec .ssh / config proxyhost.
Vous avez besoin d'un alias shell bash (j'espère que vous utilisez bash).
Dans ~/.bashrc
, ajoutez la ligne suivante
alias ssh-final='ssh -t inter ssh [email protected]'
Dans l'invite de commande, tapez simplement ce qui suit
ssh-final
final
la section dans ~/.ssh/config
n'est pas utilisée.
Détails de connexion (1)
ssh -t inter ssh [email protected]
peut être vu comme suit
local# ssh inter
inter# ssh [email protected]
local
ne fait que "parler" à inter
. Il n'y a pas de connexion ssh directe ou indirecte entre local
et final
. local
affiche simplement la sortie de ssh [email protected]
.
MÉTHODE 2 (utilisez la clé ssh sur le local)
Authentification avec la même clé 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
Copier local ~/.ssh/id_ras.pub
vers
/home/user1/.ssh/authorized_keys in `inter`
/home/user2/.ssh/authorized_keys in `final`
Détails de connexion (2)
tunneling ssh
Avant d'entrer dans le détail de ProxyCommand
, regardons l'exemple suivant
Étape 1, sur la fenêtre du terminal 1
local# ssh inter -L 2000:final.com:22
Étape 2, sur la fenêtre du terminal 2
local# ssh localhost -p 2000
Dans le terminal 1, un tunnel est installé entre le port local 2000 et le port final.com 22. Tout ce qui est envoyé au port local 2000 sera transmis au port final.com 22 et vice versa.
Dans le terminal 2, ssh se connecte au port local 2000, mais communique en réalité avec le port final.com 22, qui est le sshd.
Avec le tunneling, le client ssh local à l'étape 2 est directement connecté à final.com sshd.
La "sortie" du port local 2000 est le trafic démon ssh "brut".
L'utilisation courante d'un tel tunnel est d'accéder au serveur Web interne ou au serveur de messagerie. Voici un exemple de serveur Web
local# ssh inter -L 2000:final.com:80
Dans le navigateur, utilisez l'URL suivante
http://localhost:2000
Les deux points d'extrémité du tunnel sont le port local 2000 et le port final.com 80.
Trafic entrant et sortant du point d'extrémité du tunnel "TEL QUEL". Permet d'appeler ce trafic "brut".
ProxyCommand
Host final
User user2
Hostname <final.com / final IP Address>
Port 22
ForwardAgent yes
ProxyCommand ssh inter nc %h %p
Le ProxyCommand
prendre un peu plus loin. Il saute l'étape de création d'un port local et s'y connecte.
Un client ssh exécutera la commande jamais donnée derrière ProxyCommand
et traitera la sortie de cette commande comme du trafic "brut". Il conserve le point de terminaison local, puis démarre une connexion ssh avec lui.
Pourquoi l'un ne fonctionne pas l'autre?
La commande suivante
ssh inter nc final.com 22
signifie essentiellement (1) se connecter à inter
, puis (2) sur inter
, exécuter la commande nc final.com 22
.
nc - arbitrary TCP and UDP connections and listens
Il nc final.com 22
se connectera donc au port final.com 22, imprimera tout le trafic entrant sur stdout et enverra tous les stdin de l'autre côté. Il s'agit d'un "tunnel" entre nc stdin / out et le port final.com 22.
Puisqu'il nc
est exécuté dans la session ssh, toute sa sortie standard est retransmise au client ssh, sous forme de trafic "brut". Et le client ssh peut transmettre le trafic à nc stdin, qui se terminera au port final.com 22.
Grâce au "tunnel" ci-dessus, le client ssh local démarrera final.com
directement une session ssh .
La commande suivante
ssh -t inter ssh [email protected]
ne fonctionne pas avec ProxyCommand
car le trafic n'est pas "brut" à partir d'un démon ssh. C'est la sortie standard d'un client ssh . Le client parle au client signifie pas d'affaires.
Authentification avec une clé ssh différente (configuration d'origine 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
Copier local ~/.ssh/id_ras.pub
vers
/home/user1/.ssh/authorized_keys in `inter`
Copier local ~/.ssh/id_ras_2.pub
vers
/home/user2/.ssh/authorized_keys in `final`
Les deux ci-dessus permettront l'utilisation suivante
local# ssh final
Vérification supplémentaire
Utilisez verbeux
local# ssh -v final
Cela devrait aider à identifier le problème ssh.
Vérifier nc
ProxcyCommand
est l' exécution nc
sur inter
. Vérifiez si nc
est réellement disponible sur inter
.
local# ssh inter
inter# nc final.com 22
Vérifiez que la clé rsa est configurée correctement
Si différentes clés doivent être utilisées pour inter
et final
, les fichiers suivants doivent exister sur la machine locale
local# ls ~/.ssh
id_rsa id_rsa_2 id_rsa.pub id_rsa_2.pub
Comme vous pouvez inter
déjà utiliser ssh , vérifiez la configuration des touches final
. Depuis votre machine locale
local# ssh -t inter ssh user2@final
final# cat .ssh/authorized_keys
Vous devriez en voir le contenu id_rsa_2.pub
.
ssh -t
, mais ce que j'aimerais faire, c'est simuler exactement le comportement que j'ai de l'utilisation enssh -t
utilisant uniquement la configuration sur le.ssh/config
.checking
étape. Il doit y avoir quelque chose qui manque / qui ne va pas.ssh -t
, votre ssh tofinal
est lancé à partir deinter
, qui est "presque" le mêmelocal# ssh inter
qu'alorsinter# ssh final
. L'authentification se situe entreinter
etfinal
. Avec proxy / nc, votre ssh à final est initié depuis votre machine locale, via un tunnel, versfinal
. L'authentification se situe entrelocal
etfinal
.inter
clé ssh pour vous authentifierfinal
. Essayez de copierid_rsa_2
danslocal
~ / .ssh / id_rsa_2 (NE PAS ÉCRIRE TROP ÉCRIRE local id_rsa) et votre problème pourrait avoir disparu.nc
intégré. Donc, au lieu deProxyCommand ssh gateway nc %h %p
, vous écririezProxyCommand ssh inter -W %h:%p
.Je n'ai pas vu d'erreurs ni de déclarations ssh -v qui aideraient à voir où ça se bloque.
Hé mec, vous avez presque raison --- le meilleur moyen et le plus sûr est d'avoir les deux clés sur la machine locale. Vous utiliseriez alors le transfert ssh-agent pour vous connecter plutôt que de laisser des clés à des étapes intermédiaires. Vous avez également l'avantage de ne devoir saisir votre phrase secrète de clé qu'une seule fois par connexion.
Si vous avez un système d'exploitation moderne / convivial comme Ubuntu (sur votre machine locale), cela ne devrait pas poser de problème sans * massage *. J'ai laissé le fichier d'identité intentionnellement, vous n'en aurez pas besoin.
Votre fichier de configuration ressemblerait à ceci:
Si ce n'est pas le cas, exécutez ces étapes pour vous assurer que ssh-agent est en cours d'exécution:
Il y a un bon guide expliquant comment cela fonctionne, ici.
la source