solo accesso al tunneling ssh


31

È possibile configurare ssh (su Linux) per consentire l'accesso solo al tunneling? Cioè l'utente può impostare tunnel ma non può ottenere una shell / accedere ai file?

Risposte:


42

Sì, basta usare /bin/falsecome shell e istruire l'utente ad avviare il processo di tunneling SSH senza eseguire alcun comando remoto (ovvero il -Nflag per OpenSSH):

ssh -N -L 1234:target-host:5678 ssh-host

Ehm, se l'utente non usa -N, hanno accesso alla shell. Questo in realtà non risolve il problema ed è pericoloso.
mlissner

12
@mlissner: No, se hai /bin/falsela shell, non avrai accesso alla shell, poiché ogni sessione di login terminerà immediatamente.
Sven

10

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.


6
Questo è un consiglio pericoloso ; no-ptynon 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_keysse si desidera limitare l'accesso alla shell da lì.
Aleksi Torhamo,

@AleksiTorhamo è corretto, ma questo è un inizio; devi anche impostare shell su / usr / sbin / nologin o / bin / false in / etc / passwd per limitare completamente la shell. Ho modificato la voce sopra per riflettere ciò, insieme al consiglio di Aleksi.
Jamieson Becker,

4

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-cchiude la connessione.


3
Penso che almeno in teoria, l'utente sarà in grado di colpire CTRL + C al momento giusto (tra le linee 1 e 2) e finire con una shell bash completa.
Andreas-h

2

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à.


4
La maggior parte delle installazioni di Linux arriva già con qualcosa per questo. / sbin / nologin o / bin / false o simile.
Rory,

1
Cosa farebbe Ctrl-C nell'esempio sopra?
Arjan,

Arjan: poiché lo script viene utilizzato come shell, Ctrl-C avrebbe lo stesso effetto di " logout" su uno normale.
gravità

2
In realtà mi piace la risposta di Earl, con l'opzione "-N", ma se vuoi dare al tuo utente un messaggio utile, amichevole e informativo - e impedirgli di lasciare connessioni SSH dappertutto - allora uno script personalizzato è bello e chiaro su cosa sta facendo.
jrg

2
@jrg Questa discussione è vecchia e potresti aver cambiato idea :) ma IMHO è pericoloso uscire con script shell fatti a mano. C'è già /sbin/nologin, che puoi personalizzare con un messaggio intuitivo in /etc/nologin.txt.
dr01,

0

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 AllowGroupse Match Group.

Completamente spiegato qui: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/


2
L'utente potrebbe essere in grado di uscire dall'eseguibile in qualche modo e sfuggire a una shell. Sei assolutamente sicuro che il tuo eseguibile non ti permetterà di farlo?
dr01,

2
@ dr01 Ad essere sincero, non sono sicuro che sia sicuro al 100%. Immagino che quando esci dall'eseguibile, anche la sessione SSH viene chiusa. Lo cercherò di più e potrei commentare di nuovo qui.
Daniel W.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.