Solution 1 :
Schéma :
ssh ssh
A ------> B ------> C
^ ^
using A's using B's
ssh key ssh key
Conditions préalables :
Aexécute ssh-agent ;Apeut accéder àB;Bpeut accéder àC;ALa clé publique ssh de est présente dansB:~/.ssh/authorized_keysBLa clé publique ssh de est présente dansC:~/.ssh/authorized_keys
En ~/.ssh/config sur A , ajouter
Host C
ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'
Si votre clé privée ssh sur B se trouve dans un emplacement non standard, ajoutez son chemin après ssh-add .
Vous devriez maintenant pouvoir accéder au C à partir de A :
A$ ssh C
C$
Solution 2 :
Vérifiez si ce qui suit fonctionne.
ssh -t B ssh C
Utilisez la commande suivante si vous souhaitez utiliser la clé stockée sur B.
ssh -t B ssh -i /path/to/identity_on_B C
Ici, nous spécifions la commande, c'est-à-dire ssh -i /path/to/identity_on_B C à exécuter sur B au lieu d'un shell de connexion.
Solution 3 :
J'ai travaillé cela maintenant. Voici la solution, qui est assez simple. J'aurais dû le voir plus tôt :
~/.ssh/config :
Host B
HostName 1.2.3.4
User myuser
IdentityFile ~/.ssh/rsa_key
ControlMaster auto
ControlPath ~/.ssh/socket/master-%l-%[email protected]%h:%p
Host C.*
User customer_username
Port customer_port
IdentityFile remote/path/to/ssh/key
ForwardAgent yes
ProxyCommand ssh accessable.server nc %h %p
Host C.server-1
HostName 2.3.4.5
'B' est le serveur Proxy que vous traversez. Il doit être configuré comme vous le feriez normalement pour configurer l'accès à un serveur.
'C' est l'hôte de destination. Il doit être configuré pour utiliser 'B' dans le processus de connexion. Le fichier d'identité dans 'C' est le chemin vers la clé ssh sur 'B'. Le ProxyCommand utilise Netcat pour ouvrir la connexion à 'C' à partir de 'B'. Netcat, ou nc, devra être installé sur 'B'.
NOTE1 :Pour que cela fonctionne, vous devez copier le fichier d'identité de B (généralement ~/.ssh/rd_isa) vers A. Je change généralement son nom en rd_isa_B.
NOTE2 :Cette solution fonctionne également pour scp.
J'espère que cela aidera les autres.
Solution 4 :
J'ai écrit un script simple pour répertorier mes clés ssh sur l'instance distante, puis ajouter celle que j'ai sélectionnée à mon agent ssh local. Ce n'est pas très propre, mais me permet de garder toutes les clés à distance plutôt que localement.
Voici le script si quelqu'un est intéressé :
#!/usr/bin/ruby
require "rubygems"
require "fileutils"
# Get key list
key_list = (`ssh jumpbox "cd ~/.ssh/ ; ls id_rsa*" | sed 's/id_rsa_/ /g' | sed 's/id_rsa//g'`)
puts ' '
puts 'Available customer keys:'
puts key_list
# Get customer name input
puts ' '
puts 'Enter customer name: '
customer_name = gets.chomp
# Add key to ssh-agent
key_name = "~/.ssh/id_rsa_#{customer_name}"
puts ' '
puts "Adding #{key_name} to local ssh-agent"
`ssh jumpbox "ssh-add ~/.ssh/id_rsa_#{customer_name}"`
exit 0
Solution 5 :
La réponse de Snowball a beaucoup aidé. Cependant, j'ai apporté quelques modifications à la commande et je voulais expliquer comment cela fonctionne. Compte tenu de cette situation :
ssh ssh
A -------> B -------> C
^ ^
using A's using B's
ssh key ssh key
Modifiez votre ~/.ssh/config fichier et ajoutez l'hôte B à travers lequel vous voulez passer, exactement comme vous configureriez normalement un hôte :
Host B
User myusername
HostName b.mycompany.com
Ensuite, vous ajoutez l'hôte C sur lequel vous voulez vous retrouver :
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'
Notez le ProxyCommand , où :
ssh -T -qindique qu'il ne doit pas allouer de pseudo-TTY (-T) et taisez-vous (-q);- une fois sur l'hôte de saut
B, nous ajoutons la clé aux clés SSH deAàssh-add; - qui ne fonctionne que parce que nous avons transféré l'agent SSH en utilisant
-o 'ForwardAgent yes'. ssh-add -t 1indique que je souhaite que la clé soit ajoutée uniquement pendant la seconde nécessaire pour s'authentifier auprès de l'hôte final C ;- et enfin,
nc %h %plance unnetcatconnexion à l'hôte final%hau port%p(les deux qui seront remplis par SSH sur la base des informations contenues dans le~/.ssh/configfichier).
Si vous devez spécifier une clé personnalisée sur B à utiliser, vous pouvez le faire en modifiant le ssh-add partie :
Host C
User myusername
HostName c.intranet.mycompany.com
ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 ~/.ssh/mykey && nc %h %p'