Jawaban:
Ya, cukup gunakan /bin/false
sebagai shell dan instruksikan pengguna untuk memulai proses tunneling SSH tanpa mengeksekusi perintah remote (yaitu -N
flag untuk OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
/bin/false
shell, Anda tidak akan memiliki akses shell, karena setiap sesi login akan segera berakhir.
Di file .ssh / official_keys pengguna, masukkan sesuatu seperti berikut ini:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Jadi, pada dasarnya, Anda kontrol akan berada di depan kunci publik ssh pengguna dipisahkan oleh spasi. Dalam contoh ini, koneksi yang menggunakan kunci publik tertentu akan diizinkan untuk melakukan penerusan port SSH hanya ke server MySQL 192.168.1.10 dan server web 10.0.0.16, dan tidak akan diberi shell (no-pty). Anda secara khusus bertanya tentang opsi "no-pty", tetapi yang lain juga mungkin berguna jika pengguna hanya perlu melakukan tunnel ke server tertentu.
Lihatlah halaman manual untuk sshd untuk opsi lebih lanjut untuk file Authorized_key .
Perhatikan bahwa pengalaman pengguna mungkin terlihat sedikit aneh: ketika mereka ssh in, itu akan terlihat seperti sesi menggantung (karena mereka tidak mendapatkan pty). Tidak apa-apa. Jika pengguna telah menentukan penerusan port dengan, misalnya, "-L3306: 192.168.1.10: 3306", penerusan port masih akan berlaku.
Bagaimanapun, cobalah.
no-pty
tidak mencegah akses shell, itu hanya tidak memberi shell pty. Itu tidak menampilkan prompt (mis. "Tampaknya hang"), tetapi Anda masih dapat memberikan perintah dengan baik. Anda memerlukan command="..."
opsi .ssh/authorized_keys
jika Anda ingin membatasi akses shell dari sana.
Berikan pengguna shell yang hanya memungkinkan mereka untuk logout seperti /bin/press_to_exit.sh
#! / bin / bash baca -n 1 -p "Tekan sembarang tombol untuk keluar"
Dengan cara ini dia bisa tetap masuk selama dia mau, dengan terowongan aktif, tetapi tidak menjalankan perintah apa pun. Ctrl-c
menutup koneksi.
Tetapkan shell yang tidak membiarkan pengguna masuk.
misalnya
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
akan mencegah mereka mendapatkan shell prompt, dan memberi mereka batas waktu 60 detik - jika tidak ada koneksi yang aktif selama 60 detik maka itu akan keluar dan dengan demikian memutuskan sambungan mereka sepenuhnya (menambah jumlahnya sesuai dengan persyaratan).
Mereka juga tidak dapat menjalankan perintah jarak jauh, karena shell itu tidak akan membiarkannya.
logout
" pada yang normal.
/sbin/nologin
, yang dapat Anda sesuaikan dengan pesan yang mudah digunakan di /etc/nologin.txt
.
Solusi saya adalah menyediakan pengguna yang hanya melakukan tunneling, tanpa shell interaktif , untuk mengatur shell di / etc / passwd ke / usr / bin / tunnel_shell .
Cukup buat file executable / usr / bin / tunnel_shell dengan infinite loop .
Selain itu gunakan opsi AllowGroups
dan Match Group
.
Dijelaskan sepenuhnya di sini: http://blog.flowl.info/2011/ssh-tunnel-group-only-and-no-shell-please/
-N
, mereka memiliki akses shell. Ini benar - benar tidak menyelesaikan masalah dan berbahaya.