Outils pour utilisateurs

Outils du site


technique:linux:shells:ssh

Table des matières

SSH

Documentations

http://www-106.ibm.com/developerworks/library/l-keyc.html http://www-106.ibm.com/developerworks/linux/library/l-keyc2/ http://troumad.free.fr/Linux/Linux.sxw

Fichiers de configuration


/etc/ssh ~/.ssh

Sécuriser les connexions ssh


Fichier /etc/ssh/sshd_config cf. http://www.faqs.org/docs/securing/chap15sec122.html

- Spécifier quels utilisateurs peuvent se connecter : AllowUsers toto bibi truc@test.domaine.fr

Seuls les utilisateurs toto bibi peuvent se connecter ainsi que l'utilisateur truc, mais uniquement à partir de la machine test.domaine.fr

- Interdire l'accès à root: PermitRootLogin no

Vérifier si SSH tourne sur le PC distant et quelle est la version du programme:


telnet nom_ou_N°IP_PC_distant 22

Se connecter au PC distant :


ssh nom_ou_N°IP_PC_distant ou bien pour avec un autre utilisateur que celui qui est utilisé ssh -l utilisateur nom_ou_N°IP_PC_distant ssh utilisateur@nom_ou_N°IP_PC_distant

Pour augmenter la vitesse de transfert (compression) : ssh -C Pour pouvoir afficher des applications graphiques (X11 forwarding) : ssh -X Pour pouvoir afficher des applications graphiques (trusted X11 forwarding) : ssh -Y

En cas de message d'erreur "cannot open display", éditer /etc/ssh/sshd_config
et vérifier que X11Forwarding est à "yes".

ConnectionTimeout : En cas d'erreur de connexion le timeout est particulièrement long (de l'ordre de 2 minutes ?) Pour le raccourcir par exemple à 10 secondes : ssh -o ConnectTimeout=10 user@machine (ConnectTimeout et non pas ConnectionTimeout comme indiqué dans la doc !)

Se connecter en root au PC distant :


L'autoriser/l'interdire : voir : /etc/ssh/sshd_config

PermitRootLogin yes | no
AllowUsers
DenyUsers

Lancer une application sur la machine distante


ssh utilisateur@nom_ou_N°IP_PC_distant <commande distante>

Créer / changer un couple de clés privées/publiques


$ ssh-keygen -t rsa pour générer un couple de clés RSA $ ssh-keygen -t dsa DSA et répondre aux questions. Un couple de clés est créé dans /<répertoire>/<nom_fichier> qui a été indiqué : <nom_fichier> contient la clé privée <nom_fichier>.pub contient la clé publique La clé publique contient à la fin <login>@<machine>

ssh-keygen sans passphrase permet de se connecter à un serveur ssh sans taper de mot e passe (la passphrase). Mais c'est un trou de sécurité. Pour un login sans mot de passe, il est préférable s'utiliser ssh-agent, ssh-add et keychain. Voir plus loin à “Utilisation de ssh-agent”

Problèmes


*1* ssh: connect to host toto port 22: Connection refused 1 - Le port 22 doit être ouvert (vérifier le firewall) 2 - Vérifier que le serveur sshd est installé ET qu'il est démarré NB : après installation (urpmi openssh-server) le serveur n'est pas démarré automatiquement Le lancer avec : # service sshd start

*2*

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY! Someone could be eavesdropping on you right now (man-in-the-middle attack)! … Agent forwarding is disabled to avoid attacks by corrupted servers. X11 forwarding is disabled to avoid attacks by corrupted servers. Are you sure you want to continue connecting (yes/no)?

Cause probable : PC1 = PC sur lequel on a tapé la commande ssh PC2 et qui affiche le message d'erreur PC2 = PC que l'on essaye de connecter

Une nouvelle installation de SSH a été faite sur PC2. Pour que ce message ne s'affiche plus, supprimer dans le fichier ~.ssh/known_hosts de PC1 la (les) lignes commençant par le(s) nom(s) correspondant à PC2.

*3*

Cygwin : “connection refused” Voir l'installation, la configuration et le démarrage de sshd sur : “How to install OpenSSH sshd server and sftp server on a Windows 2000 or Windows XP or Windows Server 2003” (http://pigtail.net/LRP/printsrv/cygwin-sshd.html)

En résumé : Aujourd'hui les étapes 1 et 2 sont inutiles : c'est fait par ssh-host-config

(1) My Computer, Properties, Advanced, Environment Variables, System variables Ajouter une nouvelle variable : Variable name : CYGWIN Variable value : ntsec tty

(2) Rajouter au path :

;X:\cygwin\bin

(remplacer X par la lettre du disque sur lequel se trouve cygwin)

(3) Lancer Cygwin puis : ssh-host-config - privilege separation : yes - local user : yes - install sshd as a service : yes - CYGWIN= ntsec tty

(4) Démarrer sshd : net start sshd (ou cygrunsrv –start sshd)

Pour stopper sshd : net stop sshd (ou cygrunsrv –stop sshd)

Connexion directe sous konqueror


cf.http://www.linux.org/lessons/short/fish/t1.html#FISH-STORY fish:nom_ou_N°IP_PC_distant fish:utilisateur@nom_ou_N°IP_PC_distant fish:utilisateur@nom_ou_N°IP_PC_distant/repertoire/à/consulter Attention : avant d'utiliser fish se connecter au moins une fois avec user@ssh à la machine distante, sinon la connexion par fish est refusée. fish ne fonctionne pas sous les autres browsers : “fish is not a registered protocol” Connexion directe sous konqueror (variante) ——————————— cf. http://www.linuxgazette.com/node/401 idem fish, mais la commande est sftp : sftp:nom_ou_N°IP_PC_distant sftp:utilisateur@nom_ou_N°IP_PC_distant sftp:utilisateur@nom_ou_N°IP_PC_distant/repertoire/à/consulter

sftp n'a rien à voir avec le protocole ftp : c'est en fait du ssh. Ne fonctionne pas non plus sous les autres browsers : “sftp is not a registered protocol”

Copie de fichiers


Copier un fichier local sur un pc distant: $ scp /rep_source/fichier utilisateur@pc_distant:~/rep_destination $ scp /rep_source/fichier utilisateur@pc_distant:~/rep_destination/ (même résultat) $ scp /rep_source/fichier utilisateur@pc_distant:~/rep_destination/autre_nom_de_fichier

L'inverse : copier un fichier résidant sur un pc distant dans un répertoire local : $ scp utilisateur@pc_distant:/répertoire_distant/fichier /chemin/vers/rép_local/nom_fichier

Pour les copies récursives, option -r : $ scp -r utilisateur@pc_distant:/répertoire_distant

Pour éviter d'avoir à taper à chaque connexion le login/mot de passe :


1 - générer une paire de clés privée/publique (= clé/serrure) $ ssh-keygen -t rsa Répondre à la question “passphrase:” en entrant la phrase de son choix

Les clés générées sont dans ~/.ssh : id_rsa clé privée id_rsa.pub clé publique

Changer la “passphrase” (ou en entrer une) si nécessaire : $ ssh-keygen -p -f ~/.ssh/id_rsa

2 - Copier la clé publique dans le fichier ~/.ssh/authorized_keys de la machine sur laquelle on veut se connecter : $ scp ~/.ssh/id_rsa.pub utilisateur@nom_ou_N°IP_PC_distant:~/.ssh/authorized_keys ou bien ajouter cette clé publique à un fichier ~/.ssh/authorized_keys existant $ cat ~/.ssh/id_rsa.pub | ssh utilisateur@nom_ou_N°IP_PC_distant “cat » ~/.ssh/authorized_keys” ou bien utiliser ssh-copy-id pour ces copies.

3 - Utiliser ssh-agent (voir plus loin “Utilisation de ssh-agent”) (facultatif : n'est pas utile si on a pas entré de “passphrase”, mais l'absence de passphrase est un trou de sécurité dans le cas ou un pirate vole la clé privée)

ssh, scp, sftp sous windows

Pour se connecter depuis Windows à une machine linux : winscp winscp.net/

Monter un répertoire Unix distant

shfs à revoir : ne marche plus (utiliser sshfs à la place, voir plus loin) shfs (Secure SHell FileSystem Linux kernel module)


http://shfs.sourceforge.net/ Installation et mode d'emploi : http://www.labo-linux.org/index.php?page=lumieres&id=278 # urpmi shfs-utils

shfsmount utilisateur@machine_distante /point/de/montage ou mount -t shfs utilisateur@machine_distante /point/de/montage

Attention, contrairement à fish, pour indiquer un répertoire, rajouter “:” après le nom de machine : shfsmount utilisateur@machine_distante:/répertoire/à/monter /point/de/montage

shfsmount -o rmode=755 user@PC_distant:/répertoire/distant /point/de/montage

cf man shfsmount -o rmode=755 pour permettre à un utilisateur autre que root d'accéder au point de montage :/répertoire/distant facultatif, si absent c'est le répertoire / qui est monté,

Attention : cas d'une machine W$+Cygwin protégée par firewall (kerio) après un shfsmount -o rmode=755 user@PC_distant:/répertoire/distant /point/de/montage si la commande ls /point/de/montage bloque, c'est très probablement kerio qui bloque l'exécution de la commande cygwin ls : le vérifier

Problème : Après installation par urpmi # urpmi shfs-utils # shfsmount -o rmode=755 utilisateur@PC_distant:Documents /mnt/disk shfsmount: shfs filesystem not supported by the kernel

Solutions : - recompiler shfs à partir des sources ? - utiliser sshfs (cf. ci-dessous) à la place de shfs.

Utilisation de ssh-agent

ssh-agent est un daemon dont le seul but est de garder en mémoire (de façon sécurisée) la “passphrase” de façon à ce qu'il ne soit pas nécessaire de la taper à chaque utilisation de ssh. La commande suivante crée la variable SSH_AUTH_SOCK qui contient le chemin d'un socket que ssh, scp (et autres commandes) vont utiliser pour dialoguer avec ssh-agent : $ eval `ssh-agent`

Communiquer la clé privée et la phrase de passe à ssh-agent au moyen de ssh-add : $ ssh-add ~/.ssh/id_rsa Enter passphrase for /home/user/.ssh/id_rsa:

La clé privée est ainsi décryptée et stockée dans le cache de ssh-agent, prête à être utilisée On peut maintenant utiliser ssh et scp sans avoir à entrer le mot de passe.

keychain

Récupérer la dernière version sur http://www.gentoo.org/proj/en/keychain.xml

Permet d'utiliser un seul processus ssh-agent par systeme, et non par session (login). Particulièrement intéressant si on veut utiliser ssh et scp dans un cron. Keychain supprime les processus ssh-agent éventuellement en surnombre. Il mémorise les variables SSH_AUTH_SOCK et SSH_AGENT_PID dans ~/.keychain/nom_machine.sh

A partir d'une autre session, récupération de ces variables : source ~/.keychain/nom_machine-sh

Pour automatiser, copier les lignes suivantes dans ~/.bash_profile # Keychain lance ssh-agent et stocke les variables SSH_AUTH_SOCK et SSH_AGENT_PID # dans ~/.keychain/nom_machine-sh pour pouvoir les récupérer dans d'autres sessions # cf. http://www-106.ibm.com/developerworks/linux/library/l-keyc2/

/usr/bin/keychain ~/.ssh/id_rsa source ~/.keychain/nom_machine-sh

Tunnel SSH


Soit trois machines : A locale B intermédiaire par exemple une machine autorisée à se connecter sur C C distante par exemple un firewall

tunnel crypté A —–> B —–> C

ssh

Sur la machine locale : ssh -L port_local_quelqconque:C:port_C nom_login@B

C et B n° IP ou nom de machine port_C est le port de la machine distante C auquel on veut accéder à partir de A port_local_quelqconque : un port libre sur A vers lequel sera redirigé le port_C via le port ssh de B

Exemple : ssh -L 4091:C:443 nom_login@B # 443 = port https ou ssh -L 4091:C:443 nom_login@B sleep 180 ou encore passer en tâche de fond (<Ctrl><z>, puis bg

Le serveur web du firewall est accessible par : https://localhost:4091

urpmi, mises à jour de plusieurs machines en parallèle

Clusterssh


urpmi clusterssh (dans cooker-contrib ou MDV 2007) Permet des connexions multiples simultannées sur plusieurs machines Cf : http://clusterssh.sourceforge.net/index.php/ClusterSSH:About

man cssh

technique/linux/shells/ssh.txt · Dernière modification : 2020/04/06 15:38 de 127.0.0.1