OpenSSH
Introduction
- Comme la plupart des pages présenté sur cette Wiki nous ne verrons que le B A BA d'openSSH, pour de plus amples renseignement, je vous invite à aller consulter le site de l'éditeur.
- OpenSSH vous permettra de communiquer avec une machine distante via un tunnel crypté SSH, par exemple si vous avez un site ftp standard vos login et mot de passe apparaissent en clair du moins sur ipv4, c'est aussi vrai pour pop3, imap, vnc, ...
- OpenSSH vous permet d'encapsuler vos données dans un tunnel permettant de rendre votre service pop plus sûr par exemple.
- Nous verrons aussi qu'il vous est possible d'ouvrir une console via SSH (Secure SHell), voir si vous avez besoin d'ouvrir une application ou même une session sur une machine distante. Ici nous utilisons vraiment la machine distante comme serveur d'applications.
- Et aussi le transfert de fichier via scp.
- Je ne vous parlerais pas de l'installation comme aujourd'hui sur la plupart des distrib LINUX et UNIX il est déjà présent : openSSH
Configuration
- Répertoire principale de configuration : /etc/ssh
Serveur SSH
- Fichier de configuration du serveur SSH : /etc/ssh/sshd_config
Nous allons donc voir les options les plus courantes :
# le port que vous souhaitez utiliser Port 22 # protocol SSH : 1 ou 2 Protocol 2 # si vous disposez de plusieurs cartes réseau # spécifiez laquelle autorisée ListenAddress w.x.y.z # ou autorisez les toutes #ListenAddress :: # par mesure de sécurité root ne peut se connecter directement PermitRootLogin no # utilisateurs ou groupes autorisés AllowUsers user #AllowGroups group # si vous ne voulez pas que les users se log avec le mot de passe #PasswordAuthentication no # on autorise l'authentification par clef privée RSA ainsi que par clef publique (cf-> plus bas) RSAAuthentication yes PubkeyAuthentication yes # le fichier contenant les clefs authorisées AuthorizedKeysFile .ssh/authorized_keys # si besoin on autorise l'export display de X pour utiliser le serveur en serveur d'application X11Forwarding yes
- Démarrage du service : /etc/init.d/sshd start
fichiers /etc/ssh/sshrc et ~/.ssh/rc
Ces deux fichiers sont exécutés après la connexion d'un client au serveur SSH.
Je vous mets ici un exemple de fichier /etc/ssh/sshrc
# fichier /etc/ssh/sshrc date_ssh=`date +"%D %X"` ip_ssh=`echo $SSH_CONNECTION | awk '{print$1}'` export DISPLAY=:0 zenity --warning --text "Connexion SSH depuis $ip_ssh \nEn tant que $USER sur $SSH_TTY"
Plus d'infos : man sshd
Client SSH
ssh_config
- Fichier de configuration du client SSH : /etc/ssh/ssh_config
# port utilisé par le serveur Port 22 # protocol pris en charge par le client Protocol 2,1 # on accepte l'export display de X si le serveur le permet ForwardX11 yes # authentification par échange de paire de clefs RSAAuthentication yes # authentification par mot de passe autorisé PasswordAuthentication yes # votre empreinte SSH IdentityFile ~/.ssh/identity # endroit où se trouve la clef privée IdentityFile ~/.ssh/id_rsa # endroit où se trouve la clef publique IdentityFile ~/.ssh/id_dsa
coupler avec bash_completion
- Pour utiliser facilement ces commandes avec bash_completion :
# fichier /etc/bash_completion # necessite l'installation de bash_completion [...] # bloc if # append any available aliases from config files # spec host if [ ${#config[@]} -gt 0 ]; then host_aliases=$( sed -ne 's/Host[=\t ]//p' "${config[@]}" ) hosts=$( compgen -W "$host_aliases" -- $ocur ) COMPREPLY=( "${COMPREPLY[@]}" $hosts ) fi [...]
- On teste :
$ ssh t[TAB][TAB] toto tata titi ...
coupler avec zsh completion
- Ajoutez dans votre .zshrc
# Spec host _myhosts=($(cat ~/.ssh/config | sed -ne 's/Host[=\t ]//p')) zstyle ':completion:*' hosts ${_myhosts[1, -2]} # Slices off the last entry # Disable completion of usernames zstyle ':completion:*' users off
Fignolage
- Fichiers de configuration des clients autorisés et refusés : /etc/hosts.allow et /etc/hosts.deny
- Fichier /etc/hosts.allow
sshd : clients autorisés (séparés d'un simple espace)
- Fichier /etc/hosts.deny
sshd : ALL
Utilisation de SSH
Connexion SSH
- Connexion à un serveur Secure SHell standard
Tapez cette cmd puis à l'invité renter le mot de passe $ ssh identifiant@serveur
- Connexion à un serveur SSH par échange de clefs
- Sous l'utilisateur que vous avez choisi
$ ssh-keygen -t rsa
- Copier le contenu de la clef publique générée ~/.ssh/id_rsa dans le répertoire de l'utilisateur du serveur SSH ~/.ssh/authorized_keys
- Connecté vous, on ne voudemandera plus le mot de passe
$ ssh identifiant@serveur
Utilisation des alias ssh_config
- il existe côté client 2 fichiers quipeuvent vous aider à gérer plusieurs connexion ssh :
- /etc/ssh/ssh_config : gestion des options par défaut, des alias pour tous les utilisateurs.
- ~/.ssh/config : idem pour chaque utilisateurs.
- Je vous montre un exemple de ~/.ssh/config pour plus de détail un man ssh_config devrait suffir.
# fichier ~/.ssh/config # ssh toto.com ForwardAgent=yes Host=alias Hostname=toto.com User=titi Port=6000 Compression=yes IdentityFile=/chemin/.ssh/id_dsa # ssh eric ForwardAgent=yes Host=eric Hostname=XXX.XXX.XXX.XXX User=eric Compression=yes
- Une fois votre fichier sauvegardé au lieu de taper :
garfield@home.com $ ssh -A -C -i/chemin/.ssh/id_dsa -p6000 titi@toto.com
- tapez :
garfield@home.com $ ssh alias
Transfert de fichiers scp
- Envoie d'un fichier
$ scp fichier id@serveur:/chemin/
- Récupération d'un fichier
$ scp id@serveur:/chemin/fichier
- Utilisation de gFTP
Ce logiciel prend en charge le protocol 2 de SSH
Sécuriser un échange par encapsulation
- exemple un serveur pop :
$ ssh -L 1234:serveur:110 id@serveur
L'échange se fera par le port 1234 pour le client, pour le serveur le port 110 sera rediriger par votre port SSH (22 par défaut).
Ouverture d'une socket
l'option -D du client ssh permet l'ouverture d'une socket elle supporte SOCKS4 et SOCKS5
$ ssh -D 1234 id@host
Ensuite vous pouvez configurez vos applications (firefox, pidgin, ...) pour utiliser SOCKS5 par exemple.
- Firefox :
- Edition > Préférences > Avancé > onglet Réseau > Paramètres
- Supprimer tous les champs sauf Hôte SOCKS où vous mettrez localhost et Ports 1234
- Sélection du mode SOCKS5
Un tcpdump vous montrera que les transactions http s'effectueront à travers la socket encapsulées en ssh et donc sur la machine distante.
Les requêtes DNS reste à la charge de votre machine locale.
Traverser un proxy : corkscrew
- Récemment j'ai eu besoin de passer par une autre porte :
- exemple :
# configuration de sshd pour écouter sur le port 443 # le fichier file_auth contient "user:pass" ssh -o "ProxyCommand /usr/bin/corkscrew <proxy_server> <proxy_port> %h %p <file_auth>" -p 443 <user>@<host>
Ouverture d'une session graphique distante
- Utilisation du script Xclient
$ ssh id@serveur /etc/X11/xinit/Xclient
- Utilisation de gdmflexiserver
Ouverture d'une session d'un autre utilisateur dans une fenêtre
$ sudo apt-get install xnest $ gdmflexiserver --xnest
- Utiliser Xnest
$ sudo apt-get install xnest $ Xnest -ac :1 & $ xterm -display :1
Execution d'un programme graphique distant
- Plusieurs points doivent être vérifiés au préalable
- la variable d'environnement $DISPLAY doit-être correctement définit sur le client.
- xhost sur le serveur doit authoriser au moins votre client.
- TCP Wrapper : /etc/hosts.allow et /etc/hosts.deny
Côté client
# extrait de /etc/ssh/ssh_config [...] ForwardX11 yes [...]
Côté serveur
# extrait de /etc/ssh/sshd_config [...] X11Forwarding yes [...]
- On va faire un peu de nibbles pour se détendre :
$ ssh id@serveur gnibbles
- L'option -X du client ssh ne nécessite la modification du fichier /etc/ssh/ssh_config
Execution d'un programme sonore distant
Bon, toujours via une connexion ssh vous pouvez déporter le son d'une machine distante sur la votre.
- sur la machine locale :
esd -tcp -public &
- sur la machine distante :
$ export ESPEAKER=adresseIP_ou nom_hôte:port un petit test ? mplayer : $ mplayer -ao esd FLUX_ou_MUSIQUE vlc : vlc installer 'vlc-plugin-esd' puis $ vlc --aout esd FLUX_ou_MUSIQUE
talk
- Talk est un petit programme permettant de communiquer entre terminaux et utilisateur sur une même machine ou sur plusieurs, utilisant le tcpwrapper inetd ou xinetd dans notre cas ainsi que le protocole UDP il serait intéressant de l'utiliser uniquement sur une même machine à travers ssh (administration distante : communication facile avec l'utilisateur).
mise en place
- apt-get install talk talkd xinetd
- fichier /etc/xinetd.d/talk
# default: off # description: The talk server accepts talk requests for chatting with users \ # on other systems. service talk { flags = IPv4 disable = no socket_type = dgram wait = yes user = nobody group = tty server = /usr/sbin/in.talkd }
- fichier /etc/xinetd.d/ntalk
# default: off # description: The ntalk server accepts ntalk connections, for chatting \ # with users on different systems. service ntalk { flags = IPv4 disable = no socket_type = dgram wait = yes user = nobody group = tty server = /usr/sbin/in.ntalkd }
- autorisation de /etc/hosts.allow
in.talkd: localhost hostname in.ntalkd: localhost hostname
Un petit test
# /etc/init.d/xinetd restart
- Vous êtes physiquement sur la machine
$ xterm -e 'talk username' & xterm -e 'talk username' &
- Vous êtes connecté en ssh avec le Xforwarding activé
$ xterm -e 'talk username' & xterm -display :0 -e 'talk username' &
nc : netcat
- netcat : le couteau suisse TCP/IP
- Vous êtes connecté en ssh avec le Xforwarding activé
$ xterm -e 'sudo nc -lp 2 127.0.0.1' & xterm -display :0 -e 'nc 127.0.0.1 2' &
- Pour plus d'infos : man nc
Et sous zindozs ?
- Il est parfois utile de pouvoir prendre le contrôle d'une machine sous Windows©, les interventions via VNC limite à la prise en main SSH permet notamment le transfert de fichier, l'utilisation d'une connexion sécurisé, ... Ou inversement si vous souhaiter prendre le contrôle d'une machine sous Linux via un simple terminal ou pour forwarder l'affichage.
PuTTY
Client telnet/SSH
- Ici vous pourrez télécharger PuTTY
Xming
Forwarding de X11 avec PuTTY
- site officiel de Xming
- Pour ma part je n'ai utilisé que les packages Xming et Xming-portable-PuTTY
- Cochez la case dans PuTTY (Connection->SSH->X11) Enable X11 forwarding et mettre dans le champ :0.0
cygwin
openSSH for windows /!\ OBSOLÈTE /!\
- Serveur et client SSH/SCP sans l'installation de cygwin
- openSSH for windows
- après l'installation :
Dans une invité de commande MS-DOS : C:\Program Files\OpenSSH\bin\> mkgroup -l >> ..\etc\group C:\Program Files\OpenSSH\bin\> mkpasswd -l -u richard >> ..\etc\passwd C:\Program Files\OpenSSH\bin\> net start "OpenSSH server"
andLinux /!\ OBSOLÈTE /!\
andLinux vous permet de faire tourner un linux sous windows
- site officiel d'andLinux
- J'ai testé minimal/XFCE version avec le mode COFS
- Il y a une modification à faire pour avoir accès en SSH à votre machine dans C:\Program Files\andLinux\settings.txt
remplacer laligne commencant par eth0 par : eth0=slirp,,tcp:22:22/tcp:80:80