Risposte:
Sì, basta usare /bin/false
come shell e istruire l'utente ad avviare il processo di tunneling SSH senza eseguire alcun comando remoto (ovvero il -N
flag per OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
la shell, non avrai accesso alla shell, poiché ogni sessione di login terminerà immediatamente.
Nel file .ssh / authorized_keys dell'utente, inserisci 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 si troverebbero di fronte alla chiave pubblica ssh dell'utente separata da uno spazio. Nell'esempio, le connessioni che utilizzano la chiave pubblica specifica potranno eseguire il port forwarding SSH solo sul server MySQL 192.168.1.10 e sul server Web 10.0.0.16 e non verrà assegnata una shell (no-pty). In particolare stai chiedendo dell'opzione "no-pty", ma gli altri potrebbero anche essere utili se l'utente dovrebbe solo passare a server specifici.
Guarda la pagina man di sshd per ulteriori opzioni per il file authorized_keys .
Si noti che l'esperienza dell'utente potrebbe sembrare un po 'strana: quando entrano, sembrerà che la sessione sia sospesa (poiché non stanno ottenendo 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à comunque attivo.
In ogni caso, provalo.
no-pty
non impedisce l'accesso alla shell, ma non dà alla shell un valore. Non visualizza il prompt (es. "Sembra bloccarsi"), ma puoi comunque dare i comandi bene. È necessaria l' command="..."
opzione .ssh/authorized_keys
se si desidera limitare l'accesso alla shell da lì.
Fornire all'utente una shell che consenta solo loro di disconnettersi come /bin/press_to_exit.sh
#! / Bin / bash leggi -n 1 -p Tasto "Premi un tasto qualsiasi per uscire"
In questo modo può rimanere connesso quanto vuole, con tunnel attivi, ma non eseguire alcun comando. Ctrl-c
chiude la connessione.
Assegna una shell che non consente all'utente di accedere.
per esempio
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
impedirebbe loro di ottenere un prompt della shell e concederebbe loro un timeout di 60 secondi - se non c'è alcuna connessione attiva per 60 secondi, si chiuderà e quindi li disconnetterebbe completamente (aumentare il numero in base ai requisiti).
Non possono neanche eseguire un comando remoto, perché quella shell non glielo permetterà.
logout
" su uno normale.
/sbin/nologin
, che puoi personalizzare con un messaggio intuitivo in /etc/nologin.txt
.
La mia soluzione è di fornire all'utente che può solo eseguire il tunneling, senza una shell interattiva , per impostare quella shell in / etc / passwd su / usr / bin / tunnel_shell .
Basta creare il file eseguibile / usr / bin / tunnel_shell con un ciclo infinito .
Inoltre, utilizzare l' opzione AllowGroups
e Match Group
.
Completamente spiegato qui: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
, hanno accesso alla shell. Questo in realtà non risolve il problema ed è pericoloso.