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 clientSRV=adresse du serveur
Si on est sur le serveur la commande :
ssh -R 3999:SRV:80 CLIpermet à 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 SRVA 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.
On peut maintenant essayer de se logguer directement, et il faut penser à vérifier le contenu du fichier .ssh/authorized_keyscedric@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:
Il ne doit pas y avoir de doublons par exemple.