Sur Ubuntu 11.10, j'ai découvert que je pouvais bloquer les commandes ssh, envoyées avec et sans -T, et bloquer la copie scp, tout en autorisant le transfert de port.
Plus précisément, j'ai un serveur redis sur "somehost" lié à localhost: 6379 que je souhaite partager en toute sécurité via des tunnels ssh avec d'autres hôtes qui ont un fichier de clés et qui seront ssh avec:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Cela fera apparaître localement le serveur redis, le port "localhost" 6379 sur "somehost" sur l'hôte exécutant la commande ssh, remappé sur le port "localhost" 16379.
Sur la télécommande "somehost" Voici ce que j'ai utilisé pour authorised_keys:
cat .ssh/authorized_keys (portions redacted)
no-pty,no-X11-forwarding,permitopen="localhost:6379",command="/bin/echo do-not-send-commands" ssh-rsa rsa-public-key-code-goes-here keyuser@keyhost
Le no-pty déclenche la plupart des tentatives ssh qui veulent ouvrir un terminal.
Le permitopen explique quels ports sont autorisés à être transférés, dans ce cas le port 6379 est le port redis-server que je voulais transférer.
La commande = "/ bin / echo do-not-send-commands" fait écho à "do-not-send-commands" si quelqu'un ou quelque chose parvient à envoyer des commandes à l'hôte via ssh -T ou autrement.
À partir d'un Ubuntu récent man sshd
, la commande authorized_keys / command est décrite comme suit:
command = "command" Spécifie que la commande est exécutée chaque fois que cette clé est utilisée pour l'authentification. La commande fournie par l'utilisateur (le cas échéant) est ignorée.
Les tentatives d'utilisation de la copie sécurisée de fichiers scp échoueront également avec un écho de "do-not-send-commands". J'ai trouvé que sftp échoue également avec cette configuration.
Je pense que la suggestion de shell restreint, faite dans certaines réponses précédentes, est également une bonne idée. De plus, je conviens que tout ce qui est détaillé ici pourrait être déterminé en lisant "man sshd" et en y recherchant "authorized_keys"
no-pty
qu'il ne permette pas d'ouvrir la fenêtre interactive, cela ne fait rien pour empêcher l'exécution de la commande, de sorte que l'utilisateur peut modifier leauthorized_keys
fichier s'il a accès avec quelque chose commessh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.