Odpowiedzi:
Tak, po prostu użyj /bin/false
jako powłoki i poinstruuj użytkownika, aby rozpoczął proces tunelowania SSH bez wykonywania żadnych zdalnych poleceń (tj. -N
Flagi dla OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
powłokę, nie będziesz mieć dostępu do powłoki, ponieważ każda sesja logowania zostanie natychmiast zakończona.
W pliku użytkownika .ssh / Author_keys umieść coś takiego:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Zasadniczo więc elementy sterujące byłyby przed kluczem publicznym ssh użytkownika oddzielonym spacją. W tym przykładzie połączenia wykorzystujące określony klucz publiczny będą mogły wykonywać przekierowanie portów SSH tylko na serwer MySQL 192.168.1.10 i serwer WWW 10.0.0.16 i nie będą miały przypisanej powłoki (no-pty). Pytasz konkretnie o opcję „no-pty”, ale inne mogą być również przydatne, jeśli użytkownik ma tunelować tylko do określonych serwerów.
Spójrz na stronę podręcznika dla sshd, aby uzyskać więcej opcji dla pliku autoryzowanych_kluczy .
Zauważ, że wrażenia użytkownika mogą wyglądać nieco dziwnie: kiedy ssh się pojawi, będzie wyglądało na to, że sesja się zawiesiła (ponieważ nie dostają pty). W porządku. Jeśli użytkownik określi przekierowanie portów, na przykład „-L3306: 192.168.1.10: 3306”, przekierowanie portów będzie nadal działać.
W każdym razie spróbuj.
no-pty
nie uniemożliwia dostępu do powłoki, po prostu nie daje jej powłoki. Nie wyświetla monitu (tzn. „Wydaje się zawiesić”), ale nadal możesz wydawać polecenia w porządku. Potrzebujesz tej command="..."
opcji, .ssh/authorized_keys
jeśli chcesz ograniczyć dostęp do powłoki z tego miejsca.
Daj użytkownikowi powłokę, która pozwala tylko na wylogowanie, np /bin/press_to_exit.sh
#! / bin / bash czytaj -n 1 -p „Naciśnij dowolny klawisz, aby wyjść”
W ten sposób może pozostać zalogowany tak długo, jak chce, z aktywnymi tunelami, ale nie uruchamiać żadnych poleceń. Ctrl-c
zamyka połączenie.
Przypisz powłokę, która nie pozwala użytkownikowi się zalogować.
na przykład
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
uniemożliwiłoby im to otrzymanie zachęty powłoki i dałoby im 60-sekundowy limit czasu - jeśli przez 60 sekund nie ma aktywnego połączenia, to zakończy działanie i tym samym całkowicie je rozłączy (zwiększ liczbę zgodnie z wymaganiami).
Nie mogą również wykonać polecenia zdalnego, ponieważ powłoka im na to nie pozwala.
logout
” na normalnym.
/sbin/nologin
, który można dostosować za pomocą przyjaznej dla użytkownika wiadomości w /etc/nologin.txt
.
Moim rozwiązaniem jest zapewnienie użytkownikowi, który może tylko tunelować, bez interaktywnej powłoki , ustawienia tej powłoki w / etc / passwd na / usr / bin / tunnel_shell .
Wystarczy utworzyć plik wykonywalny / usr / bin / tunnel_shell za pomocą nieskończonej pętli .
Dodatkowo skorzystaj z opcji AllowGroups
i Match Group
.
W pełni wyjaśnione tutaj: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
, ma dostęp do powłoki. To naprawdę nie rozwiązuje problemu i jest niebezpieczne.