Outils pour utilisateurs

Outils du site


Panneau latéral

linux:ssh (lu 49773 fois)

**Ceci est une ancienne révision du document !**

SSH

Définition

SSH est un protocol crypté et donc sécurisé.
Son utilisation est indispensable à l’administration d’un serveur linux.

Touches magiques

Bloqué sur une connexion ssh avec un Ctrl+C ou Ctrl+D qui ne marche pas ?
Faite un ~. (AltGr+é puis le point du pavé numérique), la connexion sera interrompu

Besoin de rediriger un port après connexion ?
Faite un ~C (AltGr+é puis maj+c), un shell ssh apparait, tapez help pour plus d’info

  • ~^Z Fait passer ssh en arrière-plan.
  • ~# Liste les connexions transférées.
  • ~& Fait passer ssh en arrière-plan lors de la déconnexion, si des transferts de connexions ou des sessions X11 sont toujours en cours.
  • ~? Affiche la liste des caractères d’échappement.
  • ~B Émet un BREAK au système distant (uniquement pour la version 2 du protocole SSH, et si la machine d’en face le supporte).
  • ~C Ouvre une ligne de commande. Utile pour ajouter des transferts de port (port forwarding) à l’aide des options -L et -R (cf ci-après). Cela permet également la fermeture de transfert de port en cours, en utilisant -KR hostport Une aide rudimentaire est disponible avec l’option -h
  • ~R Demande un nouvel échange de clef pour la connexion (uniquement pour la version 2 du protocole SSH, et si la machine d’en face le supporte).

Configuration

/etc/ssh/sshd_config

Le man en français http://www.delafond.org/traducmanfr/man/man5/sshd_config.5.html

Si la demande de Password est longue à s'afficher

Ajouter cette option dans le fichier de config.

UseDNS no

Partage de clé public

Pour se connecter via ssh ou scp sans avoir à taper le mot de passe.

Sur la machine client, tapez la commande

ssh-keygen -t dsa

Afin de générer un fichier ~/.ssh/id_dsa.pub qui sera votre clé public.

1ère méthode

Copier ce fichier sur le serveur ssh

scp ~/.ssh/id_dsa.pub user1@serveur:/tmp/.

Ensuite sur votre serveur, connectez vous en user1 et ajoutez la clé public à votre fichier d’authorisation

user1:$ cat /tmp/id_dsa.pub >> /home/user1/.ssh/authorized_keys

Il y a parfois un 2 à authorized_keys

2eme méthode

Utiliser la commande ssh-copy-id

ssh-copy-id -i chemin/to/id_dsa.pub user@serveurDistant.com

si le port ssh est différent (n’oubliez pas les guillemets)

ssh-copy-id -i chemin/to/id_dsa.pub "user@serveurDistant.com -p 45632"

Le mot de passe sera demandé puis un message disant que tout va bien

user@serveurDistant.com's password:
Now try logging into the machine, with "ssh 'user@serveurDistant.com -p 45632'", and check in:

  .ssh/authorized_keys

to make sure we haven't added extra keys that you weren't expecting.

Et voila !!

Vérification si ca ne marche pas

Vérifiez sur le serveur que votre fichier de config /etc/ssh/sshdconfig comporte la ligne PubkeyAuthentication yes AuthorizedKeysFile %h/.ssh/authorized_keys Le cas échéant, redémarrez le serveur ssh /etc/init.d/ssh restart Et voila ;) Pour copier un fichier sans demande de mot de passe, utilisez l’option -B : scp -B fichier_a_copier user@serveur:/dossier/. ==== Dans le cas ou on a plusieurs serveurs avec une meme adresse ip mais des ports différents ==== Il arrive que derrière un routeur, on a plusieurs serveurs ssh accessible depuis des ports différents. Du coup le client ssh s’affole avec des warnings disant ATTENTION ce serveur à la même ip que l’autre mais son empreinte est différente !! Dans ce cas, créé un fichier dans le répertoire de l’utilisateur du client /home/user/.ssh/config et mettez une exception <code> Host serveurSSH.com CheckHostIP no StrictHostKeyChecking no UserKnownHostsFile=/dev/null </code> ==== Si vous un message d’erreur : SSH Authentication refused: bad ownership or modes for directory ==== Cela signifie que votre répertoire .ssh et votre fichier authorized_keys n’ont pas les bons droits. Vous devez les configurez comme ci-dessous chmod 700 /home/youruser/.ssh chmod 600 /home/youruser/.ssh/authorized_keys
Sinon vous pouvez désactiver le mode strict de votre serveur ssh dans le fichier de config. StrictModes off ===== Créer un tunnel SSH ===== ==== Scenario: Vous voulez vous connecter au serveur mysql du serveur public toto-public.com à partir de votre machine monpc.local.==== 1. Sur monpc.local: ssh -L 3307:localhost:3306 username@toto-public.com Un tunnel sera ouvert avec un nouveau port en écoute sur monpc.local:3307 qui sera redirigé sur le port localhost:3306 de la machine toto-public.com 2. Maintenant, sur monpc.local, connectez-vous à mysql: mysql -u username -p -h 127.0.0.1 -P 3307 databasename Le serveur mysql de toto-public.com pensera que cette connexion vient de localhost de toto-public.com ==== Scenario: Vous voulez vous connecter à un serveur mysql mysql.toto.local accessible uniquement par le serveur externe toto-public.com à partir de votre machine monpc.local.==== 1. Sur monpc.local: ssh -L 3307:mysql.toto.local:3306 username@toto-public.com Un tunnel sera ouvert avec un nouveau port en écoute sur monpc.local:3307 qui sera redirigé sur le port mysql.toto.local:3306 depuis la machine toto-public.com 2. Maintenant, sur monpc.local, connectez-vous à mysql: mysql -u username -p -h 127.0.0.1 -P 3307 databasename Le serveur mysql de mysql.toto.local pensera que cette connexion vient de toto-public.com ==== Scenario: Votre serveur mysql est maintenant sur monpc.local et toto-public.com à besoin de s’y connecter car la sienne est tombé en panne.==== 1. Sur monpc.local: ssh -R 3306:localhost:3306 username@toto-public.com Un nouveau port sera ouvert sur toto-public.com:3306 qui pointera sur monpc.local:3306. Un moyen simple de mettre à disposition une base mysql sur un serveur sans l’installer. Vous pouvez remplacer localhost par une machine accessible par monpc.local ==== Créer un proxy socks 5 ==== Encore plus puissant, vous êtes dans un réseau d’entreprise et vous ne pouvez pas vous connecter à internet, par contre vous pouvez vous connecter en ssh sur une machine externe. Créer un proxy sur monpc.local qui passera par toto-public.com ssh -D 3128 username@toto-public.com Maintenant vous pouvez configurer votre navigateur pour qu’il utilise le proxy localhost:3128, tout le flux de votre navigateur passera par toto-public.com Encore plus d’explication ⇒ http://fr.openclassrooms.com/informatique/cours/mise-en-place-d-un-tunnel-tcp-ip-via-ssh ===== Partager un répertoire distant via SSH ===== Avec sshfs on peut monter un répertoire distant dans un répertoire local via ssh donc hyper sécurisé. Pour ce faire, installé le paquet sshfs et assurez vous d’ajouter votre compte utilisateur dans le groupe fuse adduser toto fuse
Ensuite, créer votre répertoire de montage, par exemple /home/toto/monPCdistant Lancez la commande suivante sshfs UserDistant@PCdistant:/repertoireAmonter /home/toto/monPCdistant/
et voila ;) source ⇒ http://www.generation-linux.fr/index.php?post/2009/04/14/Monter-un-repertoire-distant-avec-SSH2 ===== Chrooter les utilisateurs en SFTP / SSH ===== Voir → http://formation-debian-testing.via.ecp.fr/ftp.html#id289286 Créer un utilisateur <code># adduser toto Ajout de l’utilisateur « toto » … Ajout du nouveau groupe « toto » (1001) … Ajout du nouvel utilisateur « toto » (1001) avec le groupe « toto » … Création du répertoire personnel « /home/toto »… Copie des fichiers depuis « /etc/skel »… Entrez le nouveau mot de passe UNIX : Retapez le nouveau mot de passe UNIX : passwd : le mot de passe a été mis à jour avec succès Modification des informations relatives à l’utilisateur toto Entrez la nouvelle valeur ou « Entrée » pour conserver la valeur proposée Nom complet []: N° de bureau []: Téléphone professionnel []: Téléphone personnel []: Autre []: Cette information est-elle correcte ? [O/n] </code> Pour chrooter toto, son répertoire home doit appartenir à root <code>cd /home ls -l drwxr-xr-x 2 toto toto 4096 16 janv. 08:44 toto chown root toto ls -l drwxr-xr-x 2 root toto 4096 16 janv. 08:44 toto</code> Modifier la config du serveur ssh : vi /etc/ssh/sshd_config Pour limiter un utilisateur au sftp <code>Match User toto X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ChrootDirectory %h </code> Pour limiter un groupe d’utilisateur <code>Match Group users X11Forwarding no AllowTcpForwarding no ForceCommand internal-sftp ChrootDirectory %h </code> ===== autossh : créer une connexion persistante ===== autossh permet de lancer une commande ssh puis de la relancer en cas d’échec. Installer autossh apt-get install autossh Comme le dit le man autossh il est préférable d’utiliser les options ServerAliveInternal et ServerAliveCountMax plutôt que d’utiliser le echo port pour le monitoring, je vais donc écrire les commandes dans ce contexte. Exemple: J’ai besoin d’un accès à une base de données distante en local La commande ssh serait ssh -L 3307:localhost:3306 username@toto-public.com La commande autossh serait autossh -M 0 -q -f -N -oServerAliveInterval=60 -oServerAliveCountMax=3 -L 3307:localhost:3306 username@toto-public.com Pour que cette connexion se lance au démarrage de la machine, placer cette commande dans le fichier /etc/rc.local ===== Gérer plusieurs clés ===== Les clés se trouvent en général dans cd ~/.ssh/ Il y a la clé privé iddsa et la clé publique iddsa.pub. Admettons que vous voulez accéder à un serveur configuré pour se connecter avec une clé spécifique que l’on vous a fourni. Par exemple iddsaserveur et iddsaserveur.pub Placez ces 2 fichiers dans votre répertoire .ssh La commande pour se connecter en ssh avec cette clé est ssh -i ~/.ssh/iddsaserveur user@serveur.com On peut aussi créer un fichier de config pour automatiser tout ça soit dans son répertoire personnel, soit au niveau de la config du serveur ssh vi ~/.ssh/config vi /etc/ssh/ssh_config On peut ensuite écrire ceci Host serveur.com IdentityFile ~/.ssh/iddsaserveur Il existe une multitude de paramètre dans ce fichier de config disponible ici ⇒ http://www.gsp.com/cgi-bin/man.cgi?section=5&topic=ssh_config

linux/ssh.1480943704.txt.gz · Dernière modification : de edmc73