W Ubuntu 11.10 stwierdziłem, że mogę blokować polecenia ssh, wysyłane z i bez -T oraz blokować kopiowanie scp, jednocześnie pozwalając na przekazywanie portów.
W szczególności mam serwer redis na "somehost" powiązany z localhost: 6379, który chcę bezpiecznie udostępniać przez tunele ssh do innych hostów, które mają plik klucza i ssh ssh za pomocą:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Spowoduje to, że serwer redis, „localhost”, port 6379 na „somehost”, pojawi się lokalnie na hoście wykonującym polecenie ssh, przemapowany na port „localhost” 16379.
Na zdalnym „jakimś hoście” Oto czego użyłem do autoryzacji kluczy:
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
No-pty wyzwala większość prób ssh, które chcą otworzyć terminal.
Zezwolenie otwarte wyjaśnia, które porty mogą być przekierowywane, w tym przypadku port 6379 jest portem serwera redis, który chciałem przekierować.
Polecenie = "/ bin / echo do-not-send-commands" odbija echo "do-not-send-commands", jeśli komuś lub czemuś udało się wysłać polecenia do hosta przez ssh -T lub w inny sposób.
Z najnowszego Ubuntu man sshd
, Authorized_keys / command jest opisane w następujący sposób:
command = "polecenie" Określa, że polecenie jest wykonywane zawsze, gdy ten klucz jest używany do uwierzytelniania. Polecenie podane przez użytkownika (jeśli istnieje) jest ignorowane.
Próby użycia bezpiecznego kopiowania plików scp również kończą się niepowodzeniem z echem „nie wysyłaj-polecenia”. Odkryłem, że sftp również nie działa w tej konfiguracji.
Myślę, że sugestia powłoki ograniczonej, przedstawiona w niektórych poprzednich odpowiedziach, jest również dobrym pomysłem. Zgadzam się również, że wszystko, co tu wyszczególniono, można ustalić czytając „man sshd” i wyszukując w nim „author_keys”
no-pty
nie pozwala na otwarcie widoku interaktywnego, nie robi nic, aby uniemożliwić wykonanie polecenia, więc użytkownik może edytowaćauthorized_keys
plik, jeśli ma dostęp za pomocą czegoś podobnegossh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.