GNU/Linux >> Linux Esercitazione >  >> Linux

SSH da A a B a C, utilizzando la chiave privata su B

Soluzione 1:

Schema:

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

Precondizioni:

  • A sta eseguendo ssh-agent;
  • A può accedere a B;
  • B può accedere a C;
  • A La chiave pubblica ssh di è presente in B:~/.ssh/authorized_keys
  • B La chiave pubblica ssh di è presente in C:~/.ssh/authorized_keys

In ~/.ssh/config su A , aggiungi

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

Se la tua chiave privata ssh su B si trova in una posizione non standard, aggiungi il suo percorso dopo ssh-add .

Ora dovresti essere in grado di accedere a C da A :

A$ ssh C
C$

Soluzione 2:

Controlla se quanto segue funziona.

ssh -t B ssh C

Usa il seguente comando se vuoi usare la chiave memorizzata su B.

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

Qui stiamo specificando il comando, ad esempio ssh -i /path/to/identity_on_B C da eseguire su B invece che su una shell di login.

Soluzione 3:

L'ho risolto ora. Ecco la soluzione, che è piuttosto semplice. Avrei dovuto vederlo prima:

~/.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' è il server proxy che stai attraversando. Dovrebbe essere configurato come si configurerebbe normalmente l'accesso a un server.

'C' è l'host di destinazione. Deve essere configurato per utilizzare 'B' nel processo di connessione. Il file di identità in 'C' è il percorso della chiave ssh su 'B'. Il ProxyCommand utilizza Netcat per aprire la connessione a 'C' da 'B'. Netcat, o nc, dovrà essere installato su 'B'.

NOTA 1:Perché funzioni, devi copiare il file di identità di B (di solito ~/.ssh/rd_isa) in A. Di solito cambio il suo nome in rd_isa_B.

NOTA2:Questa soluzione funziona anche per scp.

Spero che questo aiuti gli altri.

Soluzione 4:

Ho scritto un semplice script per elencare fondamentalmente le mie chiavi ssh sull'istanza remota, quindi aggiungere quella che ho selezionato al mio agente ssh locale. Questo non è molto pulito, ma mi consente di conservare tutte le chiavi in ​​una posizione remota piuttosto che in locale.

Ecco lo script se qualcuno è interessato:

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

Soluzione 5:

La risposta di Snowball ha aiutato molto. Tuttavia, ho apportato alcune modifiche al comando e volevo spiegare come funziona. Data questa situazione:

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

Modifica il tuo ~/.ssh/config file e aggiungi l'host B attraverso il quale vuoi saltare, proprio come configureresti normalmente un host:

Host B
 User myusername
 HostName b.mycompany.com

Quindi aggiungi l'host C su cui vuoi finire:

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

Nota il ProxyCommand , dove:

  • ssh -T -q indica che non deve allocare uno pseudo-TTY (-T ) e stai zitto (-q );
  • una volta sull'host di salto B , aggiungiamo la chiave alle chiavi SSH di A attraverso ssh-add;
  • che funziona solo perché abbiamo inoltrato l'agente SSH utilizzando -o 'ForwardAgent yes' .
  • ssh-add -t 1 indica che voglio che la chiave venga aggiunta solo per 1 secondo necessario per l'autenticazione all'host finale C;
  • e infine, nc %h %p avvia un netcat connessione all'host finale %h alla porta %p (entrambi compilati da SSH in base alle informazioni nel ~/.ssh/config file).

Se devi specificare una chiave personalizzata su B da usare, puoi farlo modificando il 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:come connettersi a un PC tramite un altro PC utilizzando Ssh?

  2. Come recuperare la chiave pubblica da una chiave privata Ssh?

  3. Connettiti a un server utilizzando SSH su Linux o Mac OS X

  4. Utilizzo di jq per recuperare il valore della chiave dall'output json

  5. L'accesso SSH non funziona utilizzando una chiave Senza password?

Come configurare la chiave pubblica e privata SSH in Linux

Come generare e utilizzare una chiave SSH utilizzando PuTTY

Genera chiavi RSA con SSH usando PuTTYgen

Accedi a un server Linux con una chiave privata SSH su un client Windows

Accedi con una chiave privata SSH su Linux e macOS

Come convertire la chiave privata di PuTTY (.ppk) in chiave SSH