Řešení 1:
Ano, stačí použít /bin/false
jako shell a instruovat uživatele, aby spustil proces tunelování SSH bez provedení jakéhokoli vzdáleného příkazu (tj. -N
příznak pro OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
Řešení 2:
Do uživatelského souboru .ssh/authorized_keys vložte něco jako následující:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Takže v podstatě byste ovládací prvky měli před veřejným klíčem ssh uživatele odděleným mezerou. V tomto příkladu bude připojení pomocí specifického veřejného klíče povoleno provádět přesměrování portů SSH pouze na server MySQL 192.168.1.10 a webový server 10.0.0.16 a nebude jim přiřazen shell (no-pty). Ptáte se konkrétně na možnost „no-pty“, ale ostatní mohou být také užitečné, pokud má uživatel tunelovat pouze na konkrétní servery.
Podívejte se na manuálovou stránku pro sshd, kde najdete další možnosti pro soubor author_keys.
Všimněte si, že uživatelská zkušenost může vypadat trochu zvláštně:když se připojí ssh, bude to vypadat, že relace visí (protože nedostávají pty). To je v pořádku. Pokud uživatel zadal přesměrování portů, například „-L3306:192.168.1.10:3306“, bude přesměrování portů stále platné.
V každém případě to vyzkoušejte.
Řešení 3:
Dejte uživateli shell, který mu umožňuje pouze odhlášení, například /bin/press_to_exit.sh
#!/bin/bash read -n 1 -p "Press any key to exit" key
Tímto způsobem může zůstat přihlášený, jak dlouho chce, s aktivními tunely, ale nespouštět žádné příkazy. Ctrl-c
ukončí spojení.
Řešení 4:
Přiřaďte shell, který nedovolí uživateli přihlásit se.
např.
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
by jim zabránil dostat výzvu shellu a dal jim časový limit 60 sekund - pokud není aktivní žádné připojení po dobu 60 sekund, ukončí se a tím je úplně odpojí (zvyšte počet podle požadavků).
Nemohou také provést vzdálený příkaz, protože jim to shell nedovolí.