SSH

De SeRoM - Wiki
Aller à : navigation, rechercher


Secure Shell (SSH) est à la fois un programme informatique et un protocole de communication sécurisé. Le protocole de connexion impose un échange de clés de chiffrement en début de connexion. Par la suite toutes les trames sont chiffrées. Il devient donc impossible d'utiliser un sniffer pour voir ce que fait l'utilisateur. Le protocole SSH a été conçu avec l'objectif de remplacer les différents programmes rlogin, telnet et rsh.


Usage

Les bases

Connexion à un serveur ssh :

   ssh hostname
   ssh ip

Connexion à un serveur avec un certain login :

   ssh -l login hostname
   ssh user@hostname

Connexion à un serveur en précisant le port :

   ssh -p n°port hostname

Exécuter une commande

Connexion à un serveur pour executer juste une commande (la connection est fermée apres l'execution de la commande:

   ssh login@hostname "ls -l /bin/"

Note: ce type de commande ne fonctionnera pas avec des commande de type vi text.txt, pour par exemple éditer un fichier texte il faudra ajouter le flag t :

   ssh -t login@hostname vi /tmp/txt

Redirextion (stdin, stdout, stderr)

Rediriger sur la machine a laquelle on est connecter:

   ssh login@hostname "ls /bin | grep -i rm"

Rediriger sur la machine locale

   ssh login&hostname "ls /bin" | grep -i rm 

Transfert de fichier

Copier un fichier de la machine a laquelle on est connectée vers la machine connectée :

   scp [user]@host:/path/to/sourcefile /path/to/destinationfile

Copier un fichier de la machine connectée a la machine a laquelle on veut se connecté :

   scp /path/to/sourcefile [user]@host:/path/to/destinationfile

Pour copier un répertoire entier on utilisera le flag -r :

   scp -r ...

On pourra aussi utiliser la commande : sftp (qui est en quelque sort une connexion ftp)

   sftp fish@xen-lo.no-ip.org

On peut aussi synchroniser des répertoire avec l'utilitaire rsync :

   rsync -e ssh login@hostname:/tmp/

Pour plus d'info man rsync.

Forwarding

ssh a la possibilité de multiplexer plusieurs connexion à travers un tunnel ssh, cela permet de forwarder des flux tcp/ip, x11, ...

On peut effectuer une connexion sur X disant :

   ssh -X login@hostname xclock

On peut aussi faire du port forwarding :

   ssh -L 1234:localhost:23 username@host

Tous le trafic qui va sur le port 1234 du client va être rediriger sur le port 23 du serveur (note : ici localhost sera résolu par le serveur ssh après que le connexion sois établie, localhost se rapporte donc au client lui-même

Autres exemples :

    ssh xen-lo.no-ip.org  -l fish  -L 10021/192.168.1.1/8080

Cette commande va rediriger le trafic du réseaux de xen-lo, ici le web serveur de sont router (ayant l ip local 192.168.1.1 sur le port 8080) sur mon port 10021, je pourrai donc visualiser la page du router en tapant 127.0.0.1:10021 dans mon navigateur.

   ssh -D 1080 xen-lo.no-ip.org 

Cette commande va rediriger tous mon trafic vers le serveur ssh, le serveur ssh jouera en quelque sorte le rôle de serveur proxy

Les clés

RSA ou DSA

En regardant sur le net on remarque qu'il y a un effet de mode qui varient au cours des années. Sur les forum et mailing list postérieur à 2000-2002 on préfère plutôt RSA. Puis après de quelques années ou l'on préconisait DSA, c'est RSA qui revient de nos jour.

J'ai trouvé une réponse bien étayée datant de juillet 2011 qui permet de se faire une bonne idée sur la question:

log

Les connexion ssh sont enregistrées dans un fichier appeler lastlog, consultable avec l'outil last. last affiche la liste des derniers utilisateurs qui se sont connectés en lisant le contenu dans /var/log/wtmp. Pour ne pas être enregistré dans ce fichier , on peut utiliser l option -T de ssh, malgré cela certain système pourrais enregistrer l'accès dans /var/log/auth.log

An almost invisible ssh connection

You can use SSH with no tty allocation while using the -T flag :

   ssh -T user@host

If you connect to a host with this way, a command like "w" or who will not show your connection. Better, add 'bash -i' at the end of the command to simulate a shell

    ssh -T user@host /bin/bash -i

Another trick with ssh is to use the -o option which allow you to specify a particular know_hosts file (by default it's ~/.ssh/know_hosts). The trick is to use -o with /dev/null:

   ssh -o UserKnownHostsFile=/dev/null -T user@host /bin/bash -i

With this trick the IP of the box you connect to won't be logged in know_hosts.

with these trick, the only way to be seen is with a ps -aux