Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
| linux:ssh [30-03-2016 14:07] – [Chrooter les utilisateurs en SFTP / SSH] edmc73 | linux:ssh [06-10-2025 20:45] (Version actuelle) – [Clé DSA non supportée] edmc73 | ||
|---|---|---|---|
| Ligne 27: | Ligne 27: | ||
| > Le man en français http:// | > Le man en français http:// | ||
| + | |||
| + | 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' | ||
| ==== Si la demande de Password est longue à s' | ==== Si la demande de Password est longue à s' | ||
| Ajouter cette option dans le fichier de config. | Ajouter cette option dans le fichier de config. | ||
| Ligne 162: | Ligne 170: | ||
| Encore plus d' | Encore plus d' | ||
| + | |||
| + | ===== Se connecter par rebond ===== | ||
| + | |||
| + | Si vous avez besoin d'une connexion ssh à une machine accessible uniquement par une autre machine et que vous n'avez pas envie de vous connecter deux fois comme par exemple | ||
| + | toto@mamachine# | ||
| + | titi@MACHINE# | ||
| + | |||
| + | Utilisons ProxyJump | ||
| + | |||
| + | ssh -J titi@MACHINE tutu@serveur | ||
| + | |||
| + | |||
| + | < | ||
| + | ssh ssh | ||
| + | A ------> B ------> C | ||
| + | ^ ^ | ||
| + | using A' | ||
| + | | ||
| + | </ | ||
| + | |||
| + | ProxyJump utilise la clé local (A) pour se connecter à (B) puis utilise cette même clé (A) pour se connecter à (C) même si (B) n'a pas de clé pour se connecter directement à (C), ça fonctionne quand même. | ||
| + | |||
| + | |||
| + | On peut aussi écrire tout ça dans le fichier de config ssh | ||
| + | |||
| + | < | ||
| + | Host serveur | ||
| + | HostName serveur | ||
| + | User tutu | ||
| + | IdentityFile ~/ | ||
| + | ProxyJump titi@MACHINE | ||
| + | |||
| + | |||
| + | # exemple pour un vieux serveur | ||
| + | |||
| + | Host vieuxserveur | ||
| + | HostName vieuxserveur | ||
| + | User root | ||
| + | IdentityFile ~/ | ||
| + | ProxyJump root@serveurIntermédiaire | ||
| + | PubkeyAcceptedKeyTypes=+ssh-dss, | ||
| + | HostKeyAlgorithms=+ssh-dss, | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ===== 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**, | ||
| + | ssh -NR 2200: | ||
| + | |||
| + | L' | ||
| + | |||
| + | L' | ||
| + | |||
| + | Une fois connecté, allons sur notre serveur **toto-public.com** et lancez la commande suivante pour vous connecter à **monpc.local** | ||
| + | |||
| + | ssh -p 2200 user@localhost | ||
| ===== Partager un répertoire distant via SSH ===== | ===== Partager un répertoire distant via SSH ===== | ||
| Ligne 181: | Ligne 251: | ||
| source => http:// | source => http:// | ||
| - | ===== Chrooter les utilisateurs en SFTP / SSH ===== | + | ==== Performance ==== |
| + | |||
| + | Un très bon article sur les performances sshfs / nfs => http:// | ||
| + | |||
| + | sshfs -o Ciphers=arcfour, | ||
| + | |||
| + | ===== Chrooter les utilisateurs en SFTP ===== | ||
| Voir -> http:// | Voir -> http:// | ||
| Ligne 205: | Ligne 281: | ||
| </ | </ | ||
| - | Pour chrooter toto, son répertoire home doit appartenir à root | + | Pour chrooter toto, son répertoire home doit appartenir à root et être en 755 |
| < | < | ||
| ls -l | ls -l | ||
| Ligne 211: | Ligne 287: | ||
| chown root toto | chown root toto | ||
| + | chmod 755 toto | ||
| ls -l | ls -l | ||
| drwxr-xr-x | drwxr-xr-x | ||
| Ligne 232: | Ligne 309: | ||
| ChrootDirectory %h | ChrootDirectory %h | ||
| </ | </ | ||
| + | |||
| + | exemple d' | ||
| + | < | ||
| + | Download a single file from a remote ftp server to your machine: | ||
| + | |||
| + | sftp {user}@{host}: | ||
| + | |||
| + | Upload a single file from your machine to a remote ftp server: | ||
| + | |||
| + | sftp {user}@{host}: | ||
| + | </ | ||
| + | ===== Chrooter les utilisateurs en SSH ===== | ||
| + | --- source: https:// | ||
| + | |||
| + | Installation du paquet bash-static | ||
| + | |||
| + | #apt-get install bash-static | ||
| + | |||
| + | Pour faciliter l' | ||
| + | |||
| + | #addgroup sshchroot | ||
| + | |||
| + | Création de l' | ||
| + | |||
| + | #adduser test | ||
| + | #usermod -d / test | ||
| + | #usermod -s / | ||
| + | #adduser test sshchroot | ||
| + | |||
| + | Mettre l' | ||
| + | |||
| + | #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, | ||
| + | mknod dev/null c 1 3 | ||
| + | mknod dev/zero c 1 5 | ||
| + | chmod 0666 dev/ | ||
| + | |||
| + | TMPFILE1=./ | ||
| + | TMPFILE2=./ | ||
| + | #Definition des commandes que vous souhaitez activer | ||
| + | APPS="/ | ||
| + | |||
| + | for app in $APPS; | ||
| + | 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}`; | ||
| + | frst_char=" | ||
| + | if [ " | ||
| + | echo " | ||
| + | fi | ||
| + | done | ||
| + | |||
| + | for lib in `cat ${TMPFILE2}`; | ||
| + | mkdir -p .`dirname $lib` > /dev/null 2>&1 | ||
| + | cp $lib .$lib | ||
| + | done | ||
| + | |||
| + | cp -r / | ||
| + | |||
| + | rm -f $TMPFILE1 | ||
| + | rm -f $TMPFILE2 | ||
| + | </ | ||
| + | |||
| + | Lancez le script dans /home/test | ||
| + | |||
| + | # | ||
| + | |||
| + | Editez le fichier de conf ssh pour enfin chrooter la connexion | ||
| + | |||
| + | #vim / | ||
| + | < | ||
| + | Match Group test | ||
| + | #%u permet de se placer automatiquement dans le home du user | ||
| + | ChrootDirectory /home/%u | ||
| + | AllowTCPForwarding no | ||
| + | X11Forwarding no | ||
| + | </ | ||
| + | |||
| + | Petit restart du service ssh | ||
| + | |||
| + | # service ssh reload | ||
| + | (on ne sait jamais) | ||
| + | #service ssh restart | ||
| + | |||
| + | Test avec le user test | ||
| + | |||
| + | < | ||
| + | I have no name!@x.x.x.x:/ | ||
| + | I have no name!@x.x.x.x:/ | ||
| + | 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 | ||
| + | </ | ||
| + | |||
| + | 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' | ||
| + | exemple: | ||
| + | |||
| + | #mkdir / | ||
| + | #chown test:test / | ||
| ===== autossh : créer une connexion persistante ===== | ===== autossh : créer une connexion persistante ===== | ||
| Ligne 263: | Ligne 463: | ||
| La commande pour se connecter en ssh avec cette clé est | La commande pour se connecter en ssh avec cette clé est | ||
| - | ssh -i ~/ | + | ssh -i ~/ |
| 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 | 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 | ||
| Ligne 271: | Ligne 471: | ||
| On peut ensuite écrire ceci | On peut ensuite écrire ceci | ||
| Host serveur.com | Host serveur.com | ||
| - | IdentityFile ~/ | + | IdentityFile ~/ |
| Il existe une multitude de paramètre dans ce fichier de config disponible ici => http:// | Il existe une multitude de paramètre dans ce fichier de config disponible ici => http:// | ||
| + | ===== Clé DSA non supportée ===== | ||
| + | |||
| + | This is a result of upgrading to OpenSSH 7.0. As the release notes for OpenSSH 7.0 say, " | ||
| + | |||
| + | The solution is to add the following line to ~/ | ||
| + | |||
| + | HostKeyAlgorithms=+ssh-dss | ||
| + | |||
| + | If the server is using OpenSSH 7.0 or newer, you'll also need to add this line to / | ||
| + | |||
| + | Alternatively, | ||
| + | |||
| + | |||
| + | ---------- | ||
| + | |||
| + | Si on essaie de se connecter sur un vieux serveur, on obtient le message d' | ||
| + | Unable to negotiate with 192.168.0.1 port 22: no matching host key type found. Their offer: ssh-rsa, | ||
| + | |||
| + | La solution est de rajouter une option dans votre ligne de commande | ||
| + | ssh 192.168.0.1 -oHostKeyAlgorithms=+ssh-rsa | ||
| + | |||
| + | Dans le fichier .ssh/config vous pouvez aussi mettre ça | ||
| + | |||
| + | Le **KexAlgorithms** n'est à ajouter seulement si l' | ||
| + | Unable to negotiate with 192.168.0.1 port 22: no matching key exchange method found. Their offer: diffie-hellman-group-exchange-sha1, | ||
| + | |||
| + | |||
| + | < | ||
| + | Host serveur | ||
| + | Hostname serveur | ||
| + | User root | ||
| + | IdentityFile ~/ | ||
| + | #Legacy changes | ||
| + | KexAlgorithms +diffie-hellman-group-exchange-sha1, | ||
| + | HostKeyAlgorithms=+ssh-rsa | ||
| + | PubkeyAcceptedAlgorithms=+ssh-rsa | ||
| + | </ | ||
| + | |||
| + | Et à contrario, si une vieille machine veut se connecter sur un serveur ssh récent et que dans les logs du serveur on a ça | ||
| + | userauth_pubkey: | ||
| + | |||
| + | On peut créer une règle pour autoriser ce vieux protocol seulement pour une ip et un user | ||
| + | vi / | ||
| + | |||
| + | < | ||
| + | Match Host 9.ip_du_vieux_serveur.1.1.1 User edmc | ||
| + | PubkeyAcceptedAlgorithms=+ssh-rsa | ||
| + | </ | ||