Su Ubuntu 11.10, ho scoperto che potevo bloccare i comandi ssh, inviati con e senza -T, e bloccare la copia di scp, consentendo il passaggio del port forwarding.
In particolare, ho un server redis su "somehost" associato a localhost: 6379 che desidero condividere in modo sicuro tramite tunnel ssh con altri host che hanno un file di chiavi e ssh con:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Questo farà sì che il redis-server, la porta "localhost" 6379 su "somehost" appaia localmente sull'host che esegue il comando ssh, rimappato sulla porta "localhost" 16379.
Sul telecomando "somehost" Ecco cosa ho usato per authorized_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
Il no-pty fa scattare la maggior parte dei tentativi ssh che vogliono aprire un terminale.
Il permesso di apertura spiega quali porte possono essere inoltrate, in questo caso la porta 6379 è la porta del server redis che volevo inoltrare.
Il comando = "/ bin / echo do-non-inviare-comandi" fa eco a "do-non-inviare-comandi" se qualcuno o qualcosa riesce a inviare comandi all'host tramite ssh -T o altro.
Da un Ubuntu recente man sshd
, authorized_keys / command è descritto come segue:
comando = "comando" Specifica che il comando viene eseguito ogni volta che questa chiave viene utilizzata per l'autenticazione. Il comando fornito dall'utente (se presente) viene ignorato.
Anche i tentativi di usare la copia sicura dei file scp falliranno con l'eco di "do-not-send-commands" Ho scoperto che sftp fallisce anche con questa configurazione.
Penso che anche il suggerimento di shell limitato, fornito in alcune risposte precedenti, sia una buona idea. Inoltre, sarei d'accordo sul fatto che tutto ciò che è dettagliato qui potrebbe essere determinato dalla lettura di "man sshd" e dalla ricerca di "authorized_keys"
no-pty
non consenta di aprire la visualizzazione interattiva, non fa nulla per impedire l'esecuzione del comando, quindi l'utente può modificare ilauthorized_keys
file se ha accesso con qualcosa di similessh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.