Solution 1 :
Oui, utilisez simplement /bin/false
en tant que shell et demandez à l'utilisateur de démarrer le processus SSH de tunneling sans exécuter de commande à distance (c'est-à-dire le -N
drapeau pour OpenSSH) :
ssh -N -L 1234:target-host:5678 ssh-host
Solution 2 :
Dans le fichier .ssh/authorized_keys de l'utilisateur, mettez quelque chose comme ceci :
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Donc, fondamentalement, vous les contrôles se trouveraient devant la clé publique ssh de l'utilisateur, séparés par un espace. Dans l'exemple, les connexions utilisant la clé publique spécifique seront autorisées à effectuer une redirection de port SSH uniquement vers le serveur MySQL de 192.168.1.10 et le serveur Web de 10.0.0.16, et ne se verront pas attribuer de shell (no-pty). Vous demandez spécifiquement l'option "no-pty", mais les autres peuvent également être utiles si l'utilisateur n'est censé se connecter qu'à des serveurs spécifiques.
Consultez la page de manuel de sshd pour plus d'options pour le fichier authorized_keys.
Notez que l'expérience de l'utilisateur peut sembler un peu étrange :lorsqu'il se connecte en ssh, il semblera que la session est suspendue (car il n'obtient pas de pty). C'est bon. Si l'utilisateur a spécifié la redirection de port avec, par exemple, "-L3306:192.168.1.10:3306", la redirection de port sera toujours effective.
Dans tous les cas, essayez-le.
Solution 3 :
Donnez à l'utilisateur un shell qui lui permet uniquement de se déconnecter, tel que /bin/press_to_exit.sh
#!/bin/bash read -n 1 -p "Press any key to exit" key
De cette façon, il peut rester connecté aussi longtemps qu'il le souhaite, avec des tunnels actifs, mais sans exécuter de commandes. Ctrl-c
ferme la connexion.
Solution 4 :
Attribuez un shell qui ne permet pas à l'utilisateur de se connecter.
ex.
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
les empêcherait de recevoir une invite du shell et leur donnerait un délai d'attente de 60 secondes - s'il n'y a pas de connexion active pendant 60 secondes, il se fermera et les déconnectera ainsi complètement (augmentez le nombre en fonction des besoins).
Ils ne peuvent pas non plus exécuter de commande à distance, car ce shell ne les autorise pas.