OpenSSH

De Wiki de Nelly & Richard
Sauter à la navigation Sauter à la recherche

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 :
    • Vous trouverez les infos nécessaires sur le site de Thomas et plus particulièrement ici.
    • Un deuxième pour la route.
  • 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

http://www.cygwin.com/

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