Catégories
Devops

SSH tips & tricks

scp – copie de fichiers via SSH

Il est possible d’utiliser une connexion SSH pour copier un fichier entre 2 machines du réseau de façon sécurisée.
Utiliser pour cela SCP sous Linux et son homologue pour Windows WinScp ou PSCP.exe en ligne de commande (de la suite Putty).
Pour copier d’un serveur SSH distant vers un répertoire local :

# copie distant vers local
scp username_distant@nom_du_serveur_ssh_distant:/dossier_distant/fichier_distant /dossier_distant/tmp/

# copie local vers distant
scp /dossier_local/fichier_local username_distant@nom_du_serveur_ssh_distant:/dossier_distant/

ssh-keygen

Générer une pair de clé publique/privée SSH

Pour bénéficier d’une authentification forte (lire ce post) :

ssh-keygen -o -a 100 -t ed25519

Il peut alors être utile de modifier son fichier ~/.ssh/config  (man ssh_config) pour y spécifier la nouvelle clé par défaut avec la directive:

IdentityFile ~/.ssh/id_ed25519

Format Open SSH

Pour convertir sa clé au format « open ssh » (pour l’ajouter à Github par ex) il suffit d’utiliser la commande:

ssh-keygen -i -f ed25519 > openssh.pub

Modifier la passphrase SSH

Pour modifier ou supprimer la passphrase lié à la clé SSH privée (celle qui est en locale et qui nous sert à s’authentifier sur les serveur distant)

ssh-keygen -p [-P old_passphrase] [-N new_passphrase] [-f keyfile]

Supprimer une clé

il peut arriver que la clé ssh publique du serveur ait changé, dans ce cas il faut la supprimer localement des known_hosts, et cela peut se faire vi ssh-keygen:

ssh mondomaine.com -i ~/.ssh/id_rsa "echo toto"
# The authenticity of host 'mondomaine.com (xxx.xxx.xxx.xxx)' can't be established.
# ECDSA key fingerprint is SHA256:+KLLKjkkjljk23mlkmlk3FF/dsFDSFD.
# Are you sure you want to continue connecting (yes/no)? yes
# Warning: Permanently added 'mondomaine.com' (ECDSA) to the list of known hosts.
# Warning: the ECDSA host key for 'mondomaine.com' differs from the key for the IP address 'xxx.xxx.xxx.xxx'
# Offending key for IP in /home/behrouze/.ssh/known_hosts:6
# Are you sure you want to continue connecting (yes/no)? xxx.xxx.xxx.xxx^C

ssh-keygen -R xxx.xxx.xxx.xxx

ssh-copy-id

Pour simplifier le scp de notre clé publique sur une autre machine il existe la commande ssh-copy-id  qui va copier notre clé dans le fichier authorized_key du compte username de la destination spécifiée :

ssh-copy-id  -i .ssh/nom_de_ma_cle.pub username@destination

Exécution distant parallélisée

parallel-ssh (Parallel versions of SSH-based tools): regroupe un ensemble de commandes (pssh, pscp, prsync, pnuke, and pslurp) permettant d’exécuter les même commandes sur plusieurs machines distantes.

Fabric (Simple Pythonic remote deployment tool): outil contrôlable via un script python (article sur l’usage puis sur Linuxjournal et un autre sur plus général sur les outils devops)

Pour de la gestion plus lourde avec du déploiement codé, il existe Terraform.

Liens

Renforcer la sécurité de son serveur SSHD Proxyfier SSH avec SSLH ou Squid

Linux Bash shell Tip & Tricks