Comment ajouter de manière permanente une identité pour SSH?


37

Je dois exécuter ssh-add <key>chaque fois que je dois SSH sur un serveur Web. Y a-t-il un moyen d'ajouter l'ID de façon permanente, donc je n'ai pas à continuer à ajouter les identités à chaque connexion?

EDIT: La clé est un fichier PEM, que j'ai téléchargé à partir d'un service cloud.

Réponses:


40

Générez votre clé comme d'habitude:, ssh-keygenpuis placez cette clé sur le serveur distant ssh-copy-id, ce qui la synchronisera avec les clés acceptées du serveur distant.

ssh-keygen
ssh-copy-id user@host

Il vous demandera votre mot de passe, puis effectuera toutes les étapes nécessaires pour lier votre .pubclé au serveur SSH distant.

Par défaut, toutes vos clés .pub seront copiées sur le serveur distant. Si vous venez de créer votre clé avec, ssh-keygenalors ce n'est pas un problème (car vous n'en avez qu'une!). Cependant, si vous avez plusieurs clés, vous ne pouvez copier qu'une clé spécifique avec l' -iindicateur.

ssh-copy-id -i ~.ssh/key_name.pub user@host

Remplacer key_name.pubpar le nom de la clé.


4
Pour quelqu'un comme moi (ou le demandeur de la question) dont la seule exposition à ssh l'utilise pour accéder à des serveurs hébergés dans le nuage où le service Web crée la clé et me la donne (dans mon cas, les serveurs AWS), cette réponse est difficile à obtenir. comprendre sans faire de recherches de fond significatives. Je n'ai jamais utilisé ssh-keygenou ssh-copy-id, par exemple. Par contre, des réponses comme celle-ci me sont parfaitement claires et utiles compte tenu de mon niveau de connaissance. A vous de décider si vous souhaitez modifier votre réponse pour aider des personnes ignorantes comme moi. :)
Mark Amery

La réponse suppose que je souhaite générer une nouvelle clé. Et si je veux simplement enregistrer une clé existante avec le trousseau?
Donquixote

@donquixote: voir la réponse ci-dessous de l'utilisateur626052.
naught101

7

Vous pouvez générer une clé ssh avec la commande:

ssh-keygen

Ensuite, vous pouvez copier votre clé sur le serveur avec:

ssh serveruser@servername "echo `cat ~/.ssh/id_dsa.pub` >> ~/.ssh/authorized_keys" 

Maintenant, vous pouvez vous connecter automatiquement à votre serveur Web


1
Pour copier la clé sur votre serveur, vous pouvez simplement utiliser ssh-copy-id -i ~/.ssh/id_dsa.pub serveruser@servernameou ~/.ssh/id_rsa.pubrespectivement. En fait, si vous utilisez le nom par défaut pour le fichier de clé, vous n'avez même pas à le spécifier.
Carsten Thiel

5

mettez ceci dans votre ~/.bashrc

eval $(ssh-agent)
ssh-add ~/.ssh/where_ever_privake_key_is 

3
C’est la seule réponse qui réponde à la question. Les autres ajoutent simplement la clé publique par défaut à un seul serveur cible, ce qui est gênant si vous en avez deux + distincts pour différents ensembles de serveurs.
naught101

3

Si votre clé est sans mot de passe et nommée en tant qu'un des fichiers que ssh tentera de rechercher lors de l'identification ( ~/.ssh/id_dsaou ~/.ssh/id_rsa), vous ne devriez pas avoir à l'ajouter à votre agent.

MAIS. S'il y avait la moindre possibilité de vol de ces fichiers, vous auriez simplement permis à quiconque d'accéder aux serveurs sur lesquels vous utilisez cette identité. En bref, pwned.

IMHO, les clés privées sans mot de passe sont une mauvaise pratique, et ne doivent être utilisées que dans des environnements ~/.ssh/authorized_keystrès restrictifs.


1
ssh-agent peut conserver votre clé privée déchiffrée pendant que vous êtes connecté. Si activé, le trousseau de clés gnome peut même utiliser votre mot de passe de connexion. Oh, et ssh-copy-id peut également copier votre clé publique sur des serveurs.
Frank

2

Écrivez un court script shell qui exécutera ssh-add, puis connectez-vous comme suit:

ssh-add ~/.ssh/your-key
ssh user@remotehost

Vous pouvez ensuite SSH dans votre hôte avec une seule commande.


1

Pour AWS, téléchargez la clé PEM et exécutez:

ssh-add /path/to/pemfile.pem

Cela a fonctionné pour moi, Ubuntu 18.04. Source , rien d'autre n'était nécessaire.

NB : Cependant, il est important de définir les autorisations sur 400 avant de procéder.

chmod 400 /path/to/pemfile.pem

Sinon, vous obtiendrez une erreur:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@ @
AVERTISSEMENT: FICHIER DE CLÉ PRIVÉE NON PROTÉGÉ! @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@ Les autorisations 0664 pour '/home/toing_toing/blablabla.pem' sont trop ouvertes. Il est nécessaire que vos fichiers de clés privées ne soient PAS accessibles aux autres. Cette clé privée sera ignorée.


0
 ssh serveruser@servername "cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys" 

-2

Parlez-vous d'Amazon Cloud? Dans votre ~ / .bashrc, créez des variables d’environnement:

# Amazon
export EC2_PRIVATE_KEY=$HOME/Keys/pk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export EC2_CERT=$HOME/Keys/cert-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.pem
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk/

oui, je parle de cloud, mais c’est la paire de clés à utiliser pour ssh dans l’instance, et les variables d’environnement ci-dessus sont nécessaires pour utiliser les api-tools :)
theTuxRacer

D'accord. Générez donc une clé RSA sans mot de passe: 'ssh-keygen -t rsa' puis concaténez la clé publique générée (~ / .ssh / id_dsa.pub) dans le fichier ~ / .ssh / registered_keys du serveur distant. Un one-line pour accomplir cela a été donné par beaucoup.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.