Soluzione 1:
Sì, basta usare /bin/false
come shell e istruire l'utente ad avviare il processo di tunneling SSH senza eseguire alcun comando remoto (ad esempio il -N
flag per OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
Soluzione 2:
Nel file .ssh/authorized_keys dell'utente, inserire qualcosa di simile al seguente:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Quindi, in pratica, i controlli sarebbero davanti alla chiave pubblica ssh dell'utente separati da uno spazio. Nell'esempio, le connessioni che utilizzano la chiave pubblica specifica potranno eseguire il port forwarding SSH solo al server MySQL di 192.168.1.10 e al server Web di 10.0.0.16 e non verrà assegnata una shell (no-pty). Stai specificatamente chiedendo dell'opzione "no-pty", ma anche le altre potrebbero essere utili se l'utente deve eseguire il tunneling solo verso server specifici.
Guarda la pagina man di sshd per ulteriori opzioni per il file authorized_keys.
Si noti che l'esperienza dell'utente può sembrare un po' strana:quando accede con ssh, sembrerà che la sessione sia sospesa (poiché non riceve un pty). Va bene. Se l'utente ha specificato il port forwarding con, ad esempio, "-L3306:192.168.1.10:3306", il port forwarding sarà ancora attivo.
In ogni caso, provalo.
Soluzione 3:
Dai all'utente una shell che gli consenta solo di disconnettersi come /bin/press_to_exit.sh
#!/bin/bash read -n 1 -p "Press any key to exit" key
In questo modo può rimanere connesso quanto vuole, con i tunnel attivi, ma non eseguire alcun comando. Ctrl-c
chiude la connessione.
Soluzione 4:
Assegna una shell che non consenta all'utente di accedere.
ad esempio
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
impedirebbe loro di ottenere un prompt della shell e darebbe loro un timeout di 60 secondi - se non c'è alcuna connessione attiva per 60 secondi, uscirà e quindi li disconnetterà completamente (aumentare il numero in base ai requisiti).
Non possono nemmeno eseguire un comando remoto, perché quella shell non glielo permette.