Di Ubuntu 11.10, saya menemukan bahwa saya dapat memblokir perintah ssh, dikirim dengan dan tanpa -T, dan memblokir penyalinan scp, sambil mengizinkan penerusan port untuk masuk.
Secara khusus saya memiliki redis-server di "somehost" yang terikat ke localhost: 6379 yang ingin saya bagikan secara aman melalui terowongan ssh ke host lain yang memiliki keyfile dan akan melakukan ssh dengan:
$ ssh -i keyfile.rsa -T -N -L 16379:localhost:6379 someuser@somehost
Ini akan menyebabkan redis-server, port "localhost" 6379 pada "somehost" muncul secara lokal di host yang menjalankan perintah ssh, dipetakan ulang ke port "localhost" 16379.
Di remote "somehost" Berikut ini yang saya gunakan untuk 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
The no-pty trip up sebagian besar upaya ssh yang ingin membuka terminal.
Izin buka menjelaskan port apa yang diizinkan untuk diteruskan, dalam hal ini port 6379 port server redis yang ingin saya teruskan.
Perintah = "/ bin / echo do-not-send-commands" echoes back "do-not-send-commands" jika seseorang atau sesuatu berhasil mengirim perintah ke host melalui ssh -T atau sebaliknya.
Dari Ubuntu terbaru man sshd
, authorized_keys / perintah dijelaskan sebagai berikut:
command = "command" Menentukan bahwa perintah dijalankan setiap kali kunci ini digunakan untuk otentikasi. Perintah yang diberikan oleh pengguna (jika ada) akan diabaikan.
Upaya untuk menggunakan penyalinan file aman scp juga akan gagal dengan gema "do-not-send-commands" Saya telah menemukan sftp juga gagal dengan konfigurasi ini.
Saya pikir saran shell terbatas, dibuat dalam beberapa jawaban sebelumnya, juga merupakan ide yang bagus. Selain itu, saya setuju bahwa semua yang dirinci di sini dapat ditentukan dari membaca "man sshd" dan menelusuri "kunci_otorisasi" di dalamnya
no-pty
tidak memungkinkan untuk membuka tampilan interaktif, ia tidak melakukan apa pun untuk mencegah eksekusi perintah, sehingga pengguna dapat mengeditauthorized_keys
file jika dia memiliki akses dengan sesuatu sepertissh server 'sed -i -e s/no-pty// ~/.ssh/authorized_keys'
.