Outils pour utilisateurs

Outils du site


linux:ssh (lu 111714 fois)

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Dernière révision Les deux révisions suivantes
linux:ssh [16-01-2014 08:49]
edmc73 [Chrooter les utilisateurs en SFTP]
linux:ssh [02-04-2021 01:27]
edmc73 [Créer un proxy socks 5]
Ligne 4: Ligne 4:
 SSH est un protocol crypté et donc sécurisé.\\ SSH est un protocol crypté et donc sécurisé.\\
 Son utilisation est indispensable à l'administration d'un serveur linux. 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 ====== ===== Configuration ======
Ligne 10: Ligne 27:
 > Le man en français http://www.delafond.org/traducmanfr/man/man5/sshd_config.5.html > Le man en français http://www.delafond.org/traducmanfr/man/man5/sshd_config.5.html
  
 +
 +Pour éviter de perdre sa session lors d'une interruption réseau, on peut rajouter
 +
 +  ClientAliveCountMax 10
 +  ClientAliveInterval 60
 +  TCPKeepAlive yes
 +
 +ce qui permet de tester si le client est en vie toutes les 60 secondes jusqu'a 10 essaie (soit 600 secondes) avant de le déconnecter
 ==== Si la demande de Password est longue à s'afficher ==== ==== Si la demande de Password est longue à s'afficher ====
 Ajouter cette option dans le fichier de config. Ajouter cette option dans le fichier de config.
Ligne 92: Ligne 117:
 ===== Créer un tunnel SSH ===== ===== Créer un tunnel SSH =====
  
-Scenario: You're at home, and you want to connect to a mysql server on the other side of a firewallThere is a machine with ssh open on it that you can use as a gateway.+==== Scenario: Vous voulez vous connecter au serveur mysql du serveur public **toto-public.com** à partir de votre machine **monpc.local**.====
  
-1. On your home machine:+1. Sur **monpc.local**:
  
-  ssh -L 3307:domain.name.of.mysqlserver:3306 username@domain.name.of.gatewayserver+  ssh -L 3307:localhost:3306 username@toto-public.com
  
-This will open a tunnel, listening on localhost:3307 and forwarding everything to mysqlserver:3306, and doing it all via the ssh service on the gateway machine.+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**
  
-This example shows us specifying port 3307 on the local end of the tunnel; I did this because I run a MySQL server on my home machineso I can't re-use the default MySQL port.+2. Maintenant, sur **monpc.local**connectez-vous à mysql:
  
-You'll now have a terminal open on the gateway machine, but you don't need it for this procedure, so set it aside.+  mysql -u username -p -h 127.0.0.1 -P 3307 databasename
  
-2. Nowon your local machineexecute a mysql connection like so:+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. Maintenantsur **monpc.local**connectez-vous à mysql:
  
   mysql -u username -p -h 127.0.0.1 -P 3307 databasename   mysql -u username -p -h 127.0.0.1 -P 3307 databasename
  
-In other words, mysql thinks it'connecting to localhost, but on a different port. In fact, the connection is being made securely to the remote mysql servervia the gateway machine and the local "mouth" of the ssh tunnel on your own machine.+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 puissantvous ê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 
 + 
 +===== Reverse ssh ===== 
 + 
 +Mon serveur **toto-public.com** voudrait se connecter à **monpc.local** or celui-ci est derrière un pare-feu ou un réseau local inaccessible mais il a quand même accès au web et donc à **toto-public.com**. 
 + 
 + 
 +Sur **monpc.local**, lancez la commande suivante 
 +  ssh -NR 2200:localhost:22 user@toto-public.com 
 + 
 +L'option ''-N'' spécifie qu'on se loggue que pour du forward, pas possible de taper des commandes 
 + 
 +L'option ''-R'' pour Remote: port_local_du_serveur_distant:ip_local_du_serveur_distant:port_local_du_serveur_local (le port 2200 est un exemple) 
 + 
 +Une fois connecté, allons sur notre serveur **toto-public.com** et lancez la commande suivante pour vous connecter à **monpc.local**
  
-3. When you're finished with your mysql session, log out of the session on the gateway machine. That will properly close the tunnel. +  ssh -p 2200 user@localhost
  
 ===== Partager un répertoire distant via SSH ===== ===== Partager un répertoire distant via SSH =====
Ligne 130: Ligne 205:
 source => http://www.generation-linux.fr/index.php?post/2009/04/14/Monter-un-repertoire-distant-avec-SSH2 source => http://www.generation-linux.fr/index.php?post/2009/04/14/Monter-un-repertoire-distant-avec-SSH2
  
-===== Chrooter les utilisateurs en SFTP / SSH =====+==== Performance ==== 
 + 
 +Un très bon article sur les performances sshfs / nfs => http://www.admin-magazine.com/HPC/Articles/Sharing-Data-with-SSHFS 
 + 
 +  sshfs -o Ciphers=arcfour,compression=no,nonempty,auto_cache,reconnect,workaround=all user@development.net:/usr/local/gitdev/ ~/dev/code 
 + 
 +===== Chrooter les utilisateurs en SFTP =====
  
 Voir -> http://formation-debian-testing.via.ecp.fr/ftp.html#id289286 Voir -> http://formation-debian-testing.via.ecp.fr/ftp.html#id289286
Ligne 154: Ligne 235:
 </code> </code>
  
-Pour chrooter toto, son répertoire home doit appartenir à root+Pour chrooter toto, son répertoire home doit appartenir à root et être en 755
 <code>cd /home <code>cd /home
 ls -l ls -l
Ligne 160: Ligne 241:
  
 chown root toto chown root toto
 +chmod 755 toto
 ls -l ls -l
-drwxr-xr-x  2 root    toto                4096 16 janv. 08:44 toto+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> 
 + 
 +exemple d'utilisation de sftp 
 +<code> 
 +Download a single file from a remote ftp server to your machine: 
 + 
 +sftp {user}@{host}:{remoteFileName} {localFileName} 
 + 
 +Upload a single file from your machine to a remote ftp server: 
 + 
 +sftp {user}@{host}:{remote_dir} <<< $'put {local_file_path}' 
 +</code> 
 +===== Chrooter les utilisateurs en SSH ===== 
 +--- source: https://debian-facile.org/viewtopic.php?id=9607  https://linuxfr.org/forums/linux-debian-ubuntu/posts/cloisonner-utilisateur-ssh-debian-8-resolu 
 + 
 +Installation du paquet bash-static 
 + 
 +  #apt-get install bash-static 
 + 
 +Pour faciliter l'administration nous allons créer un groupe sshchroot 
 + 
 +  #addgroup sshchroot 
 + 
 +Création de l'utilisateur test 
 + 
 +  #adduser test 
 +  #usermod -d / test 
 +  #usermod -s /bin/bash-static 
 +  #adduser test sshchroot 
 + 
 +Mettre l'utilisateur root propriétaire du home de test sinon la connexion ssh sera refusée 
 + 
 +  #chown root: /home/test 
 + 
 +Petit script qui vous activera des commandes supplémentaire pour le user test 
 + 
 +  #cd /home/test 
 +  #vim create.sh 
 + 
 +<file bash create.sh> 
 +#!/bin/bash 
 + 
 +mkdir -p {bin,dev,lib,lib64} 
 +mknod dev/null c 1 3 
 +mknod dev/zero c 1 5 
 +chmod 0666 dev/{null,zero} 
 + 
 +TMPFILE1=./temp1 
 +TMPFILE2=./temp2 
 +#Definition des commandes que vous souhaitez activer 
 +APPS="/bin/bash /bin/cp /bin/ls /bin/mkdir /bin/mv /bin/rm /bin/rmdir /usr/bin/id /usr/bin/rsync /usr/bin/scp /usr/bin/wget /usr/bin/vim /usr/bin/vi /bin/cat /bin/less /usr/bin/tail /usr/bin/clear /bin/chmod" 
 + 
 +for app in $APPS;  do 
 +  if [ -x $app ]; then 
 +    app_path=`dirname $app` 
 +    if ! [ -d .$app_path ]; then 
 +        mkdir -p .$app_path 
 +    fi 
 +    cp -p $app .$app 
 +    ldd $app >> ${TMPFILE1} 
 +  fi 
 +done 
 + 
 +for libs in `cat ${TMPFILE1}`; do 
 +    frst_char="`echo $libs | cut -c1`" 
 +    if [ "$frst_char" = "/" ]; then 
 +        echo "$libs" >> ${TMPFILE2} 
 +    fi 
 +done 
 + 
 +for lib in `cat ${TMPFILE2}`; do 
 +      mkdir -p .`dirname $lib` > /dev/null 2>&
 +      cp $lib .$lib 
 +done 
 + 
 +cp -r /lib/terminfo ./lib/ 
 + 
 +rm -f $TMPFILE1 
 +rm -f $TMPFILE2 
 +</file> 
 + 
 +Lancez le script dans /home/test 
 + 
 +  #./create.sh 
 + 
 +Editez le fichier de conf ssh pour enfin chrooter la connexion 
 + 
 +  #vim /etc/sshd_config  
 +<code> 
 +Match Group test 
 +        #%u permet de se placer automatiquement dans le home du user  
 +        ChrootDirectory /home/%u 
 +        AllowTCPForwarding no 
 +        X11Forwarding no 
 +</code> 
 + 
 +Petit restart du service ssh 
 + 
 +  # service ssh reload 
 +(on ne sait jamais) 
 +  #service ssh restart 
 + 
 +Test avec le user test 
 + 
 +<code> 
 +I have no name!@x.x.x.x:/
 +I have no name!@x.x.x.x:/$ ls -l 
 +total 28 
 +drwxrwxr-x 2    0 1003 4096 Mar 15 15:35 bin 
 +-rwxr-xr-x 1    0 1003  886 Mar 15 15:21 create.sh 
 +drwxr-xr-x 2    0 1003 4096 Mar 15 15:23 dev 
 +drwxr-xr-x 2 1001 1003 4096 Mar 15 15:48 lala 
 +drwxr-xr-x 4    0 1003 4096 Mar 15 15:23 lib 
 +drwxr-xr-x 2    0 1003 4096 Mar 15 15:23 lib64 
 +drwxr-xr-x 4    0 1003 4096 Mar 15 15:23 usr 
 +</code> 
 + 
 +Je ne peux pas editez dans home de test\\ 
 +C'est normal seul root doit être propriétaire. Les droits plus permissifs sont les suivants: 
 +chmod 755 si vous donnez des trop permissifs le ssh chrooter ne fonctionnera pas. Dans ce cas créer un répertoire dont l'utilisateur a full access. 
 +exemple: 
 + 
 +  #mkdir /home/test/test  
 +  #chown test:test /home/test/test 
 + 
 +===== 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é **id_dsa** et la clé publique **id_dsa.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 **id_dsa_serveur** et **id_dsa_serveur.pub** 
 + 
 +Placez ces 2 fichiers dans votre répertoire **.ssh** 
 + 
 +La commande pour se connecter en ssh avec cette clé est 
 +  ssh -i ~/.ssh/id_dsa_serveur 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/id_dsa_serveur 
 + 
 +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 
 +===== Clé DSA non supportée ===== 
 + 
 +This is a result of upgrading to OpenSSH 7.0. As the release notes for OpenSSH 7.0 say, "Support for ssh-dss host and user keys is disabled by default at run-time"
 + 
 +The solution is to add the following line to ~/.ssh/config on every client machine (every machine where you run the SSH client): 
 + 
 +  PubkeyAcceptedKeyTypes=+ssh-dss 
 + 
 +If the server is using OpenSSH 7.0 or newer, you'll also need to add this line to /etc/ssh/sshd_config on each server machine. 
 + 
 +Alternatively, you can generate an entirely new SSH key and add it to your authorized_keys file on every server you ever want to log into. I recommend you use RSA, to avoid compatibility woes. I don't recommend ECDSA, as apparently gnome-keyring-daemon doesn't automatically pick up SSH keys of type ECDSA. 
 + 
linux/ssh.txt · Dernière modification: 13-01-2023 08:50 de edmc73