Je suis paresseux à la maison et utilise l'authentification par mot de passe pour mes ordinateurs personnels. Je suis prêt à passer à l'authentification par clé. Il existe de nombreuses options sur le Web pour ce faire, y compris catting puis claquage de la clé, scping la clé directement, etc.
Je cherche le moyen le plus simple et le plus recommandé de copier une clé, avec un peu de chance qu'il existe un wrapper de commodité quelque part dans le paquet ssh Ubuntu?
Je suis déjà au courant sur comment désactiver les connexions par mot de passe .
La commande ssh-copy-id
(dans le paquet openssh-client et installée par défaut) fait exactement cela:
ssh-copy-id [email protected]
copie la clé publique de votre identité par défaut (utilisez -i identity_file
pour d’autres identités) sur l’hôte distant.
L'identité par défaut est votre clé ssh "standard". Il se compose de deux fichiers (clé publique et clé privée) dans votre répertoire ~/.ssh
, généralement nommés identity
, id_rsa
, id_dsa
, id_ecdsa
ou id_ed25519
(de même que .pub
), en fonction du type de clé. Si vous n'avez pas créé plus d'une clé ssh, vous n'avez pas à vous soucier de la spécification de l'identité, ssh-copy-id la choisira simplement automatiquement.
Si vous n'avez pas d'identité, vous pouvez en générer une avec l'outil ssh-keygen
.
De plus, si le serveur utilise un port différent de celui par défaut (22
), vous devez utiliser les guillemets de cette façon ( source ):
ssh-copy-id "[email protected] -p <port-number>"
J'aime la réponse de Marcel. Je ne connaissais pas cette commande. J'ai toujours utilisé ce que j'avais trouvé sur un site Web de Sun :
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'cat >> .ssh/authorized_keys && echo "Key copied"'
J'ai pensé le poster ici encore, parce que c'est une bonne illustration de ce que l'on peut obtenir avec du code shell avec le pouvoir de ssh
. Mais utiliser le ssh-copy-id
est définitivement un moyen plus sûr de le faire correctement!
Notez que si le dossier .ssh
n’existe pas déjà, la commande ci-dessus échouera. En outre, lors de la création du fichier, il peut être préférable de définir une autorisation minimale possible (en lecture-écriture, pour le propriétaire uniquement). Voici une commande plus avancée:
cat ~/.ssh/id_rsa.pub | ssh <user>@<hostname> 'umask 0077; mkdir -p .ssh; cat >> .ssh/authorized_keys && echo "Key copied"'
Sur Ubuntu, vous pouvez récupérer vos clés dans Launchpad:
ssh-import-id [launchpad account name]
Détails :
Collez le contenu de votre fichier de clé publique dans ce champ (y compris le commentaire). Une telle clé ressemble à:
ssh-rsa AAAAB3Nza .... UyDOFDqJp lekensteyn
Ici, ssh-rsa
indique que la clé est une clé RSA, AAAAB3Nza .... UyDOFDqJp
est la clé réelle et lekensteyn
est le commentaire.
Le package ssh-import-id
doit être installé sur la machine à laquelle vous devez accéder à distance. Ce paquet est installé avec le paquet openssh-server
car il s'agit d'un paquet recommandé pour openssh-server
. Après vous être assuré que ssh-import-id
a été installé sur la machine cliente, exécutez:
ssh-import-id [launchpad account name]
Cela téléchargera la clé publique des serveurs du tableau de bord via HTTPS, qui vous protège des attaques MITM.
Sur Ubuntu Lucid et avant, vous pouvez accomplir la même chose avec:
wget https://launchpad.net/~[lp acount name]/+sshkeys -O - >> ~/.ssh/authorized_keys && echo >> ~/.ssh/authorized_keys
La commande echo
est nécessaire pour obtenir une nouvelle ligne après la ligne avec la clé SSH.
pour port personnalisé
ssh-copy-id -i "[email protected] -p2222"
L'option -i par défaut est ~/.ssh/id_rsa.pub, si vous voulez une autre clé, indiquez le chemin de la clé après -i
ATTENTION: Si vous n'avez pas écrit le -i, toutes les clés trouvées dans ~/.ssh seront copiées.
ssh-copy-id
fait exactement cela. Je ne sais pas pourquoi certaines des autres réponses ajoutent des informations inexactes. L'aide montre les éléments suivants:
~$ ssh-copy-id -h
Usage: /usr/bin/ssh-copy-id [-h|-?|-f|-n] [-i [identity_file]] [-p port] [[-o <ssh -o options>] ...] [user@]hostname
-f: force mode -- copy keys without trying to check if they are already installed
-n: dry run -- no keys are actually copied
-h|-?: print this help
Je viens d'essayer ce qui suit sur le client Ubuntu 18.04 avec un serveur CentOS 7.6 et cela a fonctionné à merveille. L'exemple montre l'utilisation d'un port personnalisé de 2222
et la spécification d'une clé publique à ~/.ssh/path-to-rsa.pub
$ ssh-copy-id -i ~/.ssh/path-to-rsa.pub -p 2222 [email protected]
Avant d’exécuter la commande, j’ai utilisé le commutateur -n
à la fin pour effectuer un essai à blanc qui a confirmé que la commande fonctionnerait comme prévu. Une fois confirmé, j’exécutai à nouveau la commande comme ci-dessus, sans le commutateur -n
.