SSH Secure Shell

Une petite couche de sécurité ne fera jamais de mal ;)

SCP

ou la copie d'une machine a une autre juste avec ssh :)
scp -p user@hots1:file user@host2:file


Faire un tunnel ssh

CLI=adresse du client
SRV=adresse du serveur

Si on est sur le serveur la commande :
ssh -R 3999:SRV:80 CLI
permet à quelqu'un sur le client de se connecter au web par le tunnel ssh ‚en tappant dans un naviguateur http://localhost:3999.

On peut faire directement la même chose depuis le client avec la commande :
ssh -L 3999:SRV:80 SRV
A noter que l'on peut également faire cela depuis Windows avec PuTTy‚dans la rubrique Tunnels mettre Source port 3999 et Destination SRV:80, faire Add‚puis retourner dans session mettre l'adresse du serveur, port 22, sauvegarder la config et faire Open pour créer le tunnel et se connecter au serveur.
Les utilisations sont nombreuses, cela permet de faire passer des applications non sécurisées (pop, ftp ...) par un tunnel crypté.

Connexion ssh par certificat entre 2 serveurs

Pour les divers scripts de backup et autre, on a toujours besoin de se connecter a un autre serveur a partir d'un script, mais cela implique laisser les identifiants dans un fichier qui risque d'etre lu, et cela pose des enormes problemes de maintenance quand on change un mot de passe, car il faut changer tout les scripts !
Reste alors la solution de connexion via certificat, on echange un certificat entre les machines pour pouvoir se connecter entre les deux sans aucun login.

On commence par créer un certificat sur la machine locale:
cedric@local-host$ ssh-keygen

Generating public/private rsa key pair.
Enter file in which to save the key (/home/cedric/.ssh/id_rsa):[Entrer]
Enter passphrase (empty for no passphrase): [Entrer]
Enter same passphrase again: [Entrer]
Your identification has been saved in /home/cedric/.ssh/id_rsa.
Your public key has been saved in /home/cedric/.ssh/id_rsa.pub.
The key fingerprint is:
12:c6:a4:f2:95:39:24:11:31:d5:de:96:2f:f2:35:3b cedric@local-host

Le certificat crée, on le copie sur la machine distante

cedric@local-host$ ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host
cedric@remote-host's password:[tapper le mot de passe de la machine distante ici]

Note: ssh-copy-id rajoute la clef a la suite du fichier .ssh/authorized_key sur remote-host.
On peut maintenant tester la connexion à la machine distante

cedric@local-host$ ssh remote-host
Last login: Sun Nov 16 14:03:12 2008 from dryades.org
[SSH ne devrait pas vous demander de mot de passe]
cedric@remote-host$

Ca y est! Loggué sans login sur la machine, vous pouvez maintenant inclure des ssh directs dans les scripts sans aucune forme de login
Attention cependant, le certificat n'est valable que dans un sens, pour se connecter de remote-host à local-host sans pass, il faudra faire l'operation inverse!

Utiliser ssh-copy-id avec ssh-add/ssh-agent


Si on ne passe pas le parametre -i et si ~/.ssh/identity.pub n'existe pas, ssh-copy-id affichera l'erreur suivante:
cedric@local-host$ ssh-copy-id -i remote-host
/usr/bin/ssh-copy-id: ERROR: No identities found

Si vous avez passé les clefs à ssh-agent en utilisant ssh-add, alors ssh-copy-id recuperera les clefs via ssh-agent pour les copier sur remote-host. cad, il copiera les clefs retournées par ssh-add -L à remote-host, je le répète, si on ne précise pas -i lors du ssh-copy-id.

cedric@local-host$ ssh-agent $SHELL
cedric@local-host$ ssh-add -L
The agent has no identities.

cedric@local-host$ ssh-add
Identity added: /home/cedric/.ssh/id_rsa (/home/cedric/.ssh/id_rsa)

cedric@local-host$ ssh-add -L
ssh-rsa AAAAB3NzaC1fc2EAAAABIwAAAQEAsJIEILxftj8aSxMa3d8t6JvM79DyBV
aHrtPhTYpq7kIEMUNzApnyxsHpH1tQ/Ow== /home/cedric/.ssh/id_rsa

cedric@local-host$ ssh-copy-id -i remote-host
cedric@remote-host's password:
On peut maintenant essayer de se logguer directement, et il faut penser à vérifier le contenu du fichier .ssh/authorized_keys
Il ne doit pas y avoir de doublons par exemple.