Come inviare ssh al server remoto usando una chiave privata?


77

Ho due server. Entrambi i server sono in CentOS 5.6. Voglio SSH dal server 1 al server 2 utilizzando una chiave privata che ho (chiave privata SSH-2 OpenSSH).

Non so come farlo su Unix. Ma quello che ho fatto su Windows usando Putty è stato quello di alimentare la mia chiave privata OpenSSH a putty-gen e generare una chiave privata in formato PPK.

Tuttavia, creerei uno script bash dal server 1 che eseguirà alcuni comandi sul server 2 tramite SSH.

Come posso SSH sul Server 2 usando il mio file di chiave privata dal Server 1?


1
Su molti sistemi Linux e Unix, questo può essere fatto usandossh-copy-id user@machine
Paul Tomblin,

Risposte:


66

Hai bisogno della tua chiave pubblica SSH e avrai bisogno della tua chiave privata ssh. Le chiavi possono essere generate con ssh_keygen. La chiave privata deve essere mantenuta sul Server 1 e la chiave pubblica deve essere memorizzata sul Server 2.

Questo è completamente descritto nella manpage di openssh, quindi ne citerò molto. Si consiglia di leggere la sezione "Autenticazione". Anche il manuale openSSH dovrebbe essere davvero utile: http://www.openssh.org/manual.html

Prestare attenzione a ssh perché ciò influisce sulla sicurezza del server.

Da man ssh:

 ~/.ssh/identity
 ~/.ssh/id_dsa
 ~/.ssh/id_rsa
     Contains the private key for authentication.  These files contain
     sensitive data and should be readable by the user but not acces-
     sible by others (read/write/execute).  ssh will simply ignore a
     private key file if it is accessible by others.  It is possible
     to specify a passphrase when generating the key which will be
     used to encrypt the sensitive part of this file using 3DES.

 ~/.ssh/identity.pub
 ~/.ssh/id_dsa.pub
 ~/.ssh/id_rsa.pub
     Contains the public key for authentication.  These files are not
     sensitive and can (but need not) be readable by anyone.

Questo significa che puoi archiviare la tua chiave privata nella tua home directory in .ssh. Un'altra possibilità è dire a ssh tramite il -iparametro switch di utilizzare un file di identità speciale. Anche da man ssh:

 -i identity_file
     Selects a file from which the identity (private key) for RSA or
     DSA authentication is read.  The default is ~/.ssh/identity for
     protocol version 1, and ~/.ssh/id_rsa and ~/.ssh/id_dsa for pro-
     tocol version 2.  Identity files may also be specified on a per-
     host basis in the configuration file.  It is possible to have
     multiple -i options (and multiple identities specified in config-
     uration files).

Questo è per la chiave privata. Ora devi inserire la tua chiave pubblica sul Server 2. Ancora una citazione da man ssh:

  ~/.ssh/authorized_keys
         Lists the public keys (RSA/DSA) that can be used for logging in
         as this user.  The format of this file is described in the
         sshd(8) manual page.  This file is not highly sensitive, but the
         recommended permissions are read/write for the user, and not
         accessible by others.

Il modo più semplice per ottenere quello è copiare il file sul Server 2 e aggiungerlo al file authorized_keys:

scp -p your_pub_key.pub user@host:
ssh user@host
host$ cat id_dsa.pub >> ~/.ssh/authorized_keys

L'autorizzazione tramite chiave pubblica deve essere consentita per il demone ssh, vedere man ssh_config. Di solito questo può essere fatto aggiungendo la seguente istruzione al file di configurazione:

PubkeyAuthentication yes

10
Ciao grazie per lo sforzo, ma ho solo bisogno di questo. ssh -i keyfileGrazie!
Aivan Monceller,

8
Dopo aver generato la chiave, il modo più semplice e consigliato per installarlo sul server è con ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles 'SO- smetti di essere malvagio' il

5
È interessante il modo in cui tutti dimenticano di dire che è necessario eseguire ssh-adddopo aver creato una chiave sul computer da cui ci si sta connettendo. questo è ciò che provoca mal di testa alla maggior parte delle persone.
Luka,

3
NOTA IMPORTANTE: il client può avere molte chiavi private e selezionare in base a un nome arbitrario nel proprio file ~ / .ssh / config privato dove Host = fornisce il nome arbitrario, HostName fornisce un nome o un indirizzo IP, Porta = la porta di destinazione, L'utente è il nome utente di destinazione e ItentityFile = punta al file della chiave privata. Questo set di funzionalità è spesso trascurato ed è la soluzione a molti problemi di configurazione, come ad esempio avere più coppie di chiavi che altrimenti si scontrano nello spazio dei nomi.
Richard T,

1
Quando provo a connettermi con SSH usando $ ssh -i ~/.ssh/id_rsa myuser@ssh.myhost.comottengo l'errore, myuser@ssh.myhost.com: Permission denied (publickey).ho la chiave creata, aggiunta localmente usando ssh-adde aggiunta come chiave autorizzata sul server remoto.
Aaron Franke,

21

Ho usato ssh con l'opzione -i per aggiungere la tua chiave qui.

Se si desidera passare arg1, arg2 con il file .sh, basta passarlo dopo il file .sh e utilizzare uno spazio di utilizzo per separarlo.

ssh -i home/avr/new.pem ar@231.221.54.8 "/var/www/beta/betatolive.sh mmin 30"


1
Non dimenticare di impostare le autorizzazioni giuste:chmod 600 home/avr/new.pem
Brian Haak il

16

La prima cosa che devi fare è assicurarti di aver eseguito il comando keygen per generare le chiavi:

ssh-keygen -t rsa

Quindi utilizzare questo comando per inviare la chiave al server remoto, modificandola in modo che corrisponda al nome del server.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'

6
chiamiamo ssh-copy-id user@hostnameinvece
andrej

7

Aggiungi la chiave pubblica ( id_[rd]sa.pub) per il tuo computer di origine (da dove provieni) al ~/.ssh/authorized_keysfile del server di destinazione per il nome utente in cui vuoi inserire. Se hai perso la chiave pubblica, ti consigliamo di crearne una nuova ssh-keygen. L'uso degli argomenti predefiniti dovrebbe essere corretto per la maggior parte degli scopi. Se hai bisogno di istruzioni più dettagliate, ci sono migliaia di tutorial che puoi cercare su Google.


4

ssh-copy-id - usa le chiavi disponibili localmente per autorizzare gli accessi su una macchina remota

Utilizzare ssh-copy-idsu Server 1, presupponendo che si disponga della coppia di chiavi (generata con ssh-keygen):

ssh-copy-id -i ~/.ssh/id_rsa user@server2_hostname

Ora dovresti essere in grado di ssh in Server 2 con ssh usando la chiave privata

ssh -i ~/.ssh/id_rsa user@server2_hostname

Infatti, se controlli cat ~/.ssh/authorized_keyssu Server 2, vedrai che la chiave pubblica è stata aggiunta per te.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.