Domaine public đź…­

CMS minimal
ecrit avec VI

[ /  ^ < ]

ssh

communication chiffrée entre ordinateurs avec ou sans mot de passe

corkscrew
sshfs
shellinabox
sshpass
principes       01/06/2023
bonnes pratiques       15/03/2018
mauvaises pratiques       07/09/2023
passage environnement       23/01/2025

# le principe est de lancer des commandes sur un unix distant
# si il fait tourner un logiciel serveur ssh (ex /usr/sbin/sshd)
ssh compte@adresse

# ou si l'@ n'est pas disponnible
ssh adresse -l compte

# ou si le nom d'utilisateur est identique
ssh adresse

# il est possible de lancer juste une commande par exemple verifier que le serveur est Ă  l'heure
ssh adresse date

# ssh est configuré pour refuser de connecter à un compte sans mot de passe

# pour éviter de saisir le mot de passe de l'utilisateur, il faut générer une paire de clés publique/privée
ssh-keygen
# en général on ne répond pas à la première question qui determine où ranger les clés
# puis il est proposé de saisir un mot de passe pour protéger la clé privée
# mise à part sur les serveurs physiquement protégés, IL FAUT METTRE UN MOT DE PASSE

# ssh ignore les clés mal protégées
# pour vérifier les droits des toutes les étapes du chemin
namei -om ~/.ssh

# pour préparer l'accès à un compte distant sans son mot de passe
cat .ssh/id_*.pub | ssh compte@adresse "cat >> .ssh/authorized_keys"

# il est possible de parametrer les connexions en fonction des clés en mettrant en debut de ligne:
command="command"  ssh-rsa AAAAB3N....
# la commande authprogs est prevue expres pour parametrer cela

# si on en a beaucoup Ă  faire :
export SSHPASS="mot de passe" # variable en lettres capitales
cat .ssh/id_*.pub | sshpass -e ssh compte@adresse "cat >> .ssh/authorized_keys"

# pour se connecter sans mots de passe il faut l'enregister pour la durée de la sessions
ssh-add
# sur un PC perso ça fonctionne tel quel, mais sur une connexion à distance on reçoit le message:
## Could not open a connection to your authentication agent.
# il faut lancer l'agent :
ssh-agent
# cela repond par exemple :
SSH_AUTH_SOCK=/tmp/ssh-50R1Th8Z3hMK/agent.16339; export SSH_AUTH_SOCK;
SSH_AGENT_PID=16340; export SSH_AGENT_PID;
echo Agent pid 16340;
# ce sont des commandes Ă  tapper, donc pour que ce soit automatique :
eval $(ssh-agent)

# tout cela ne fonctionne pas si les clés ne sont pas protégées
chmod go-w $HOME
chmod go-rwx $HOME/.ssh

# il est tentant de ne pas mettre de mot de passe à sa clé privée
# cela peut se justifier entre serveurs protégés physiquement
# mais sur un PC perso ou pire sur une clé USB ?
# qui copie une clé privée s'assure tous les accès auxquels elle donne droit
# heureusement un option permet d'y remedier même après coup
# ou de protéger une copie de clé utilisée par ailleurs sans mot de passe
ssh-keygen -p

# à tout hasard, il est possible de produire la clé publique qui correspond à une clé privée
ssh-keygen -y fichier_cle_privee

# on peut jouer avec les entrées/sorties, par exmple archiver ou extraire à distante :
tar cvz . | ssh toto@serveur cat \> archive.tgz
ssh toto@serveur cat archive.tgz | tar xvz

# il est possible de lancer des commandes graphiques à distance et récupérer l'affichage
ssh -X toto@serveur
# mais un administrateur du serveur peux pirater la machine d'oĂą vient la connexion
# lors de connexion sur un serveur appartenant à un autre réseau, ssh peut bloques l'affichage graphique
# si on fait vraiment confiance au serveur distant
ssh -Y toto@serveur

# il est possible de ne pas vérifier la clé d'un serveur
# cela est pratique pour les ajouter automatique Ă  la liste .ssh/known_hosts
for i in serv1 serv2
ssh  -o StrictHostKeyChecking=no -n $i date
done

# on peut aussi metrre ça dans .ssh/config mais là c'est carrement irresponsable

# ne resoud pas le problème
# Bad server host key: Invalid key length

# problème pour accéder à une ancienne machine ssh toto Unable to negotiate with 192.168.0.NNN port 22: no matching host key type found. Their offer: ssh-rsa,ssh-dss # commande à lancer une fois: sudo update-crypto-policies --set DEFAULT:SHA1 sudo reboot # bien sûr on pert en sécurité

# si on veut passer une variable d'anvironement
# il faut utiliser les variable locale L_....
# mais elles ont toute un rĂ´le j'utilise LC_PAPER

ƒraηcois✉memoρersο.ƒr