Comment ssh sur un serveur distant en utilisant une clé privée?

77

J'ai deux serveurs. Les deux serveurs sont dans CentOS 5.6. Je souhaite passer d'un serveur SSH à un autre à l'aide d'une clé privée que j'ai (clé privée OpenSSH SSH-2).

Je ne sais pas comment le faire sur Unix. Mais ce que j’ai fait sur Windows avec Putty, c’était d’alimenter ma clé privée OpenSSH avec putty-gen et de générer une clé privée au format PPK.

Cependant, je créerais un script bash à partir du serveur 1 qui exécutera certaines commandes sur le serveur 2 via SSH.

Comment puis-je SSH sur le serveur 2 en utilisant mon fichier de clé privée à partir du serveur 1?

Aivan Monceller
la source
1
Sur de nombreux systèmes Linux et Unix, cela peut être fait en utilisantssh-copy-id user@machine
Paul Tomblin

Réponses:

66

Vous avez besoin de votre clé publique SSH et de votre clé privée ssh. Les clés peuvent être générées avec ssh_keygen. La clé privée doit être conservée sur le serveur 1 et la clé publique sur le serveur 2.

Ceci est complètement décrit dans la page de manuel de openssh, je vais donc en citer beaucoup. Vous devriez lire la section 'Authentification'. Le manuel openSSH devrait également être très utile: http://www.openssh.org/manual.html

S'il vous plaît soyez prudent avec ssh car cela affecte la sécurité de votre serveur.

De 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.

Cela signifie que vous pouvez stocker votre clé privée dans votre répertoire personnel au format .ssh. Une autre possibilité consiste à indiquer à ssh via le -icommutateur de paramètre d'utiliser un fichier d'identité spécial. Aussi de 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).

Ceci est pour la clé privée. Vous devez maintenant introduire votre clé publique sur le serveur 2. Encore une citation de 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.

La méthode la plus simple consiste à copier le fichier sur le serveur 2 et à l’ajouter au fichier authorised_keys:

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

L'autorisation via une clé publique doit être autorisée pour le démon ssh, voir man ssh_config. Cela peut généralement être fait en ajoutant l'instruction suivante au fichier de configuration:

PubkeyAuthentication yes
echox
la source
10
Bonjour, merci pour l'effort mais je n'ai besoin que de ça. ssh -i keyfileMerci!
Aivan Monceller
8
Après avoir généré la clé, la façon d'installer la plus simple et recommandé sur le serveur est avec ssh-copy-id: ssh-copy-id -i ~/.ssh/foo.id_rsa remote.example.com.
Gilles 'SO- arrête d'être méchant'
5
Il est intéressant de voir comment tout le monde oublie de mentionner que vous devez exécuter ssh-addaprès avoir créé une clé sur l’ordinateur auquel vous vous connectez. c'est ce qui cause un mal de tête à la plupart des gens.
Luka
3
REMARQUE IMPORTANTE: le client peut avoir plusieurs clés privées et sélectionner en fonction d’un nom arbitraire dans son fichier privé ~ / .ssh / config où Host = donne le nom arbitraire, HostName donne un nom ou une adresse IP, Port = le port cible, L'utilisateur est le nom d'utilisateur de destination et ItentityFile = pointe vers le fichier de clé privée. Cet ensemble de fonctionnalités est souvent négligé et constitue LA solution de nombreux problèmes de configuration, tels que le fait de posséder plusieurs paires de clés qui se heurteraient autrement dans un espace de nom.
Richard T
1
Lorsque j'essaie de me connecter à SSH à l'aide de $ ssh -i ~/.ssh/id_rsa [email protected]l'erreur, [email protected]: Permission denied (publickey).la clé est créée, ajoutée localement à l'aide de ssh-add, et ajoutée en tant que clé autorisée sur le serveur distant.
Aaron Franke
21

J'ai utilisé ssh avec l'option -i pour ajouter votre clé ici.

Si vous souhaitez transmettre arg1, arg2 avec un fichier .sh, transmettez-le après un fichier .sh et utilisez un espace d’utilisation pour le séparer.

ssh -i home/avr/new.pem [email protected] "/var/www/beta/betatolive.sh mmin 30"

Avinash Raut
la source
1
N'oubliez pas de définir les bonnes autorisations:chmod 600 home/avr/new.pem
Brian Haak
16

La première chose à faire est de vous assurer que vous avez exécuté la commande keygen pour générer les clés:

ssh-keygen -t rsa

Utilisez ensuite cette commande pour pousser la clé sur le serveur distant, en la modifiant pour qu'elle corresponde à votre nom de serveur.

cat ~/.ssh/id_rsa.pub | ssh user@hostname 'cat >> .ssh/authorized_keys'
Anubhav Singh
la source
6
appelons à la ssh-copy-id user@hostnameplace
andrej
7

Ajoutez la clé publique ( id_[rd]sa.pub) de votre machine source (à partir de laquelle vous effectuez le SSH) au ~/.ssh/authorized_keysfichier du serveur de destination du nom d'utilisateur que vous souhaitez utiliser pour SSH. Si vous avez perdu la clé publique, vous voudrez en créer une nouvelle avec ssh-keygen. L'utilisation des arguments par défaut pour cela devrait être acceptable dans la plupart des cas. Si vous avez besoin d'instructions plus détaillées, vous pouvez rechercher des milliers de tutoriels sur Google.

Kevin
la source
4

ssh-copy-id - utilise les clés disponibles localement pour autoriser les connexions sur un ordinateur distant

Utilisez ssh-copy-idsur le serveur 1, en supposant que vous avez la paire de clés (générée avec ssh-keygen):

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

Maintenant, vous devriez être capable de ssh sur le serveur 2 avec ssh en utilisant la clé privée

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

En effet, si vous vérifiez cat ~/.ssh/authorized_keyssur le serveur 2, vous verrez que la clé publique est ajoutée pour vous.

Sida Zhou
la source