GNU/Linux >> Tutoriels Linux >  >> Linux

SSH de A à B vers C, en utilisant la clé privée sur B

Solution 1 :

Schéma :

    ssh       ssh
A ------> B ------> C
    ^          ^
 using A's   using B's
 ssh key     ssh key

Conditions préalables :

  • A exécute ssh-agent ;
  • A peut accéder à B;
  • B peut accéder à C;
  • A La clé publique ssh de est présente dans B:~/.ssh/authorized_keys
  • B La clé publique ssh de est présente dans C:~/.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 -q indique 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 de A à ssh-add;
  • qui ne fonctionne que parce que nous avons transféré l'agent SSH en utilisant -o 'ForwardAgent yes' .
  • ssh-add -t 1 indique 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 %p lance un netcat connexion à l'hôte final %h au port %p (les deux qui seront remplis par SSH sur la base des informations contenues dans le ~/.ssh/config fichier).

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'

Linux
  1. Comment configurer les clés SSH à l'aide de cPanel

  2. SSH sans mot de passe utilisant des paires de clés publiques-privées

  3. Ssh – Étant donné une clé Ssh privée, comment récupérer la clé publique ?

  4. Configuration de l'authentification basée sur la clé SSH d'openSSH à SSH2

  5. Utilisation de la même clé privée SSH sur plusieurs machines

Comment configurer la clé publique et privée SSH sous Linux

Comment générer et utiliser une clé SSH avec PuTTY

Générer des clés RSA avec SSH en utilisant PuTTYgen

Connectez-vous à un serveur Linux avec une clé privée SSH sur un client Windows

Connectez-vous avec une clé privée SSH sous Linux et macOS

Comment convertir la clé privée de PuTTY (.ppk) en clé SSH