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 [17-10-2014 06:50] – [Chrooter les utilisateurs en SFTP / SSH] edmc73 | linux:ssh [13-01-2023 07:50] (Version actuelle) – [Clé DSA non supportée] edmc73 | ||
---|---|---|---|
Ligne 12: | Ligne 12: | ||
Besoin de rediriger un port après connexion ?\\ | Besoin de rediriger un port après connexion ?\\ | ||
Faite un '' | Faite un '' | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
Ligne 19: | 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 101: | Ligne 117: | ||
===== Créer un tunnel SSH ===== | ===== Créer un tunnel SSH ===== | ||
- | ==== Scenario: Vous voulez vous connecter | + | ==== Scenario: Vous voulez vous connecter |
- | 1. Sur **toto.local**: | + | 1. Sur **monpc.local**: |
- | ssh -L 3307: | + | ssh -L 3307: |
- | Un tunnel sera ouvert avec un nouveau port en écoute sur **toto.local: | + | Un tunnel sera ouvert avec un nouveau port en écoute sur **monpc.local: |
- | 2. Maintenant, sur **toto.local**, connectez-vous à mysql: | + | 2. Maintenant, sur **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 | ||
- | Le serveur mysql de **toto-externe.com** pensera que cette connexion vient de localhost de **toto-externe.com** | + | 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-externe.com** accessible uniquement par le serveur externe **toto-externe.com** à partir de votre machine **toto.local**.==== | + | ==== 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 **toto.local**: | + | 1. Sur **monpc.local**: |
- | ssh -L 3307:mysql-externe.com:3306 username@toto-externe.com | + | ssh -L 3307:mysql.toto.local:3306 username@toto-public.com |
- | Un tunnel sera ouvert avec un nouveau port en écoute sur **toto.local: | + | Un tunnel sera ouvert avec un nouveau port en écoute sur **monpc.local: |
- | 2. Maintenant, sur **toto.local**, connectez-vous à mysql: | + | 2. Maintenant, sur **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 | ||
- | Le serveur mysql de **mysql-externe.com** pensera que cette connexion vient de **toto-externe.com** | + | Le serveur mysql de **mysql.toto.local** pensera que cette connexion vient de **toto-public.com** |
- | ==== Scenario: Votre serveur mysql est maintenant sur **toto.local** et **toto-externe.com** à besoin de s'y connecter car la sienne est tombé en panne.==== | + | ==== 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 **toto.local**: | + | 1. Sur **monpc.local**: |
- | ssh -R 3306: | + | ssh -R 3306: |
+ | |||
+ | Un nouveau port sera ouvert sur **toto-public.com: | ||
+ | |||
+ | 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' | ||
+ | |||
+ | 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: | ||
- | Un nouveau port sera ouvert sur **toto-externe.com: | ||
- | Vous pouvez remplacer localhost par une machine accessible par **toto.local** | ||
Encore plus d' | Encore plus d' | ||
+ | |||
+ | ===== 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 ===== | ||
Avec **sshfs** on peut monter un répertoire distant dans un répertoire local via ssh donc hyper sécurisé. | Avec **sshfs** on peut monter un répertoire distant dans un répertoire local via ssh donc hyper sécurisé. | ||
Ligne 159: | Ligne 205: | ||
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 183: | Ligne 235: | ||
</ | </ | ||
- | 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 189: | Ligne 241: | ||
chown root toto | chown root toto | ||
+ | chmod 755 toto | ||
ls -l | ls -l | ||
drwxr-xr-x | drwxr-xr-x | ||
Modifier la config du serveur ssh : | Modifier la config du serveur ssh : | ||
+ | vi / | ||
Pour limiter un utilisateur au sftp | Pour limiter un utilisateur au sftp | ||
Ligne 209: | Ligne 263: | ||
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** permet de lancer une commande ssh puis de la relancer en cas d' | ||
+ | |||
+ | Installer **autossh** | ||
+ | apt-get install autossh | ||
+ | |||
+ | |||
+ | Comme le dit le **man autossh** il est préférable d' | ||
+ | |||
+ | Exemple: J'ai besoin d'un accès à une base de données distante en local | ||
+ | |||
+ | La commande ssh serait | ||
+ | ssh -L 3307: | ||
+ | |||
+ | La commande autossh serait | ||
+ | autossh -M 0 -q -f -N -oServerAliveInterval=60 -oServerAliveCountMax=3 -L 3307: | ||
+ | |||
+ | Pour que cette connexion se lance au démarrage de la machine, placer cette commande dans le fichier **/ | ||
+ | |||
+ | ===== 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 ~/ | ||
+ | |||
+ | 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 ~/ | ||
+ | vi / | ||
+ | |||
+ | On peut ensuite écrire ceci | ||
+ | Host serveur.com | ||
+ | IdentityFile ~/ | ||
+ | |||
+ | 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 ~/ | ||
+ | |||
+ | PubkeyAcceptedKeyTypes=+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 | ||