GNU/Linux >> Tutoriales Linux >  >> Linux

SSH de A a B a C, usando clave privada en B

Solución 1:

Esquema:

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

Condiciones previas:

  • A está ejecutando ssh-agent;
  • A puede acceder a B;
  • B puede acceder a C;
  • A La clave pública ssh de está presente en B:~/.ssh/authorized_keys
  • B La clave pública ssh de está presente en C:~/.ssh/authorized_keys

En ~/.ssh/config en A , agregar

Host C
    ProxyCommand ssh -o 'ForwardAgent yes' B 'ssh-add && nc %h %p'

Si su clave privada ssh en B está en una ubicación no estándar, agregue su ruta después de ssh-add .

Ahora debería poder acceder a C de A :

A$ ssh C
C$

Solución 2:

Compruebe si lo siguiente funciona.

ssh -t B ssh C

Use el siguiente comando si desea usar la clave almacenada en B.

ssh -t B ssh -i /path/to/identity_on_B C

Aquí estamos especificando el comando, es decir, ssh -i /path/to/identity_on_B C para ejecutarse en B en lugar de un shell de inicio de sesión.

Solución 3:

He resuelto esto ahora. Aquí está la solución, que es bastante sencilla. Debería haberlo visto antes:

~/.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' es el servidor Proxy por el que está saltando. Debe configurarse como normalmente configuraría el acceso a un servidor.

'C' es el host de destino. Debe configurarse para usar 'B' en el proceso de conexión. El archivo de identidad en 'C' es la ruta a la clave ssh en 'B'. El ProxyCommand usa Netcat para abrir la conexión a 'C' desde 'B'. Netcat, o nc, deberá instalarse en 'B'.

NOTA 1:Para que esto funcione, debe copiar el archivo de identidad de B (generalmente ~/.ssh/rd_isa) a A. Normalmente cambio su nombre a rd_isa_B.

NOTA 2:Esta solución también funciona para scp.

Espero que esto ayude a otros.

Solución 4:

Escribí un script simple para enumerar básicamente mis claves ssh en la instancia remota y luego agregar la que seleccioné a mi agente ssh local. Esto no es muy limpio, pero me permite mantener todas las claves en una ubicación remota en lugar de localmente.

Aquí está el guión si alguien está interesado:

#!/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

Solución 5:

La respuesta de Snowball ayudó mucho. Sin embargo, hice algunas modificaciones al comando y quería explicar cómo funciona. Dada esta situación:

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

Modifica tu ~/.ssh/config archivo y agregue el host B a través del cual desea saltar, tal como normalmente configuraría un host:

Host B
 User myusername
 HostName b.mycompany.com

Luego agrega el host C en el que quieres terminar:

Host C
 User myusername
 HostName c.intranet.mycompany.com
 ProxyCommand ssh -T -q -o 'ForwardAgent yes' B 'ssh-add -t 1 && nc %h %p'

Tenga en cuenta el ProxyCommand , donde:

  • ssh -T -q indica que no debe asignar un pseudo-TTY (-T ) y silencio (-q );
  • una vez en el host de salto B , añadimos la clave a las claves SSH de A a través de ssh-add;
  • que solo funciona porque reenviamos el agente SSH usando -o 'ForwardAgent yes' .
  • ssh-add -t 1 indica que quiero que se agregue la clave solo durante el segundo necesario para autenticarse en el host final C;
  • y finalmente, nc %h %p inicia un netcat conexión al host final %h en el puerto %p (ambos serán completados por SSH según la información en el ~/.ssh/config archivo).

Si necesita especificar una clave personalizada en B para usar, puede hacerlo modificando el ssh-add parte:

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. Ssh:¿cómo conectarse a una PC a través de otra PC usando Ssh?

  2. Ssh:dada una clave Ssh privada, ¿cómo recuperar la clave pública?

  3. Configuración de autenticación basada en clave SSH de openSSH a SSH2

  4. Usando jq para obtener el valor clave de la salida json

  5. El inicio de sesión SSH no funciona con una clave ¿Sin contraseña?

Cómo configurar la clave pública y privada SSH en Linux

Cómo generar y usar una clave SSH usando PuTTY

Genere claves RSA con SSH usando PuTTYgen

Inicie sesión en un servidor Linux con una clave privada SSH en un cliente de Windows

Inicie sesión con una clave privada SSH en Linux y macOS

Cómo convertir la clave privada de PuTTY (.ppk) en clave SSH