Solusi 1:
Ya, gunakan saja /bin/false
sebagai shell dan menginstruksikan pengguna untuk memulai proses tunneling SSH tanpa menjalankan perintah jarak jauh apa pun (yaitu -N
bendera untuk OpenSSH):
ssh -N -L 1234:target-host:5678 ssh-host
Solusi 2:
Di file .ssh/authorized_keys pengguna, masukkan sesuatu seperti berikut:
permitopen="192.168.1.10:3306",permitopen="10.0.0.16:80",no-pty ssh-rsa AAAAB3N...
Jadi, pada dasarnya, kontrol Anda akan berada di depan kunci publik ssh pengguna yang dipisahkan oleh spasi. Dalam contoh, 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 menanyakan tentang opsi "no-pty", tetapi yang lain mungkin juga berguna jika pengguna seharusnya hanya melakukan tunnel ke server tertentu.
Lihat halaman manual untuk sshd untuk opsi lainnya untuk file authorized_keys.
Perhatikan bahwa pengalaman pengguna mungkin terlihat sedikit aneh:ketika mereka ssh masuk, sesi akan terlihat seperti macet (karena mereka tidak mendapatkan pty). Tidak apa-apa. Jika pengguna telah menentukan penerusan port dengan, misalnya, "-L3306:192.168.1.10:3306", penerusan port akan tetap berlaku.
Bagaimanapun, cobalah.
Solusi 3:
Beri pengguna sebuah shell yang hanya memungkinkan mereka untuk keluar seperti /bin/press_to_exit.sh
#!/bin/bash read -n 1 -p "Press any key to exit" key
Dengan cara ini dia bisa tetap masuk selama dia mau, dengan terowongan aktif, tetapi tidak menjalankan perintah apa pun. Ctrl-c
menutup koneksi.
Solusi 4:
Tetapkan shell yang tidak mengizinkan pengguna masuk.
mis.
#!/bin/sh
echo "No interactive login available."
sleep 60
exit 0
akan mencegah mereka mendapatkan prompt shell, dan memberi mereka batas waktu 60 detik - jika tidak ada koneksi yang aktif selama 60 detik maka itu akan keluar dan dengan demikian memutuskannya sepenuhnya (meningkatkan jumlahnya sesuai dengan persyaratan).
Mereka juga tidak dapat menjalankan perintah jarak jauh, karena shell itu tidak mengizinkan mereka.