objectif
Installer votre clé publique SSH sur un serveur de façon sûre et idempotente pour un accès sans mot de passe, avec permissions correctes et ports personnalisés.
code minimal
# générer une clé si nécessaire
test -f ~/.ssh/id_ed25519 || ssh-keygen -t ed25519 -a 100 -C "dev@data.pm" -f ~/.ssh/id_ed25519
# copier la clé publique (évite les doublons) vers data.pm
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@data.pm
utilisation
# port personnalisé (ex: 4422) et clé spécifique
ssh-copy-id -i ~/.ssh/id_ed25519.pub "-p 4422 deploy@data.pm"
# préciser l'IdentityFile si plusieurs clés locales
ssh-copy-id -i ~/.ssh/id_ed25519_data_pm.pub deploy@data.pm
# vérifier l'accès (sans mot de passe)
ssh -o BatchMode=yes deploy@data.pm 'true' && echo "OK"
# corriger les permissions côté serveur si besoin
ssh deploy@data.pm 'install -d -m 700 ~/.ssh; [ -f ~/.ssh/authorized_keys ] && chmod 600 ~/.ssh/authorized_keys || true'
variante(s) utile(s)
# fallback sans ssh-copy-id (idempotent)
key="$(cat ~/.ssh/id_ed25519.pub)"
ssh deploy@data.pm "umask 077; mkdir -p ~/.ssh; touch ~/.ssh/authorized_keys; grep -qxF '$key' ~/.ssh/authorized_keys || printf '%s\n' '$key' >> ~/.ssh/authorized_keys"
# via bastion (ProxyJump)
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o ProxyJump=bastion.data.pm deploy@api.data.pm
# hôte local de dev
ssh-copy-id -i ~/.ssh/id_ed25519.pub dev@data.pm.local
# plusieurs hôtes d'un coup (www, api, git)
for h in data.pm api.data.pm git.data.pm; do
ssh-copy-id -i ~/.ssh/id_ed25519.pub "deploy@$h"
done
# ajouter la clé sur un port non standard via ProxyCommand (legacy)
ssh-copy-id -i ~/.ssh/id_ed25519.pub -o ProxyCommand="ssh -W %h:%p bastion.data.pm" deploy@data.pm
notes
- préférez
ed25519pour des clés modernes et courtes; protégez la clé privée par une passphrase. ssh-copy-idcrée~/.ssh(700) etauthorized_keys(600) si nécessaire et évite les doublons.- évitez
StrictHostKeyChecking=no; enregistrez d’abord la clé d’hôte (voir snippetssh-keyscan-ajouter-cle-hote-en-securite.md). - utilisez
-ipour choisir la clé publique à installer quand vous en avez plusieurs. - pour des accès très restreints, combinez avec des options dans
authorized_keys(voir snippetssh-authorized-keys-restrictions.md).