Jawaban:
Tidak. Ini bukan perintah "diizinkan", tetapi perintah "terpaksa" (sebagai opsi ForceCommand ).
Satu-satunya kemungkinan adalah menggunakan kunci yang berbeda untuk perintah yang berbeda atau membaca parameter dari stdin
.
Anda hanya dapat memiliki satu perintah per kunci, karena perintah itu "dipaksa".
Tetapi Anda dapat menggunakan skrip wrapper. Perintah yang dipanggil mendapatkan baris perintah asli sebagai variabel lingkungan $SSH_ORIGINAL_COMMAND
, yang dapat dievaluasi.
Misalnya, masukkan ~/.ssh/allowed-commands.sh
:
#!/bin/sh
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
case "$SSH_ORIGINAL_COMMAND" in
"systemctl restart cups")
systemctl restart cups
;;
"shutdown -r now")
shutdown -r now
;;
*)
echo "Access denied"
exit 1
;;
esac
Kemudian referensi ~/.ssh/authorized_keys
dengan
command="/home/user/.ssh/allowed-commands.sh",…
Dalam SSH yang hebat , buku The Secure Shell: The Definitive Guide karya O'Reilly, dalam bab delapan, ada contoh yang bagus diberikan dengan menggunakan skrip seperti berikut:
#!/bin/sh
/bin/echo "Welcome!
Your choices are:
1 See today's date
2 See who's logged in
3 See current processes
q Quit"
/bin/echo "Your choice:"
read ans
while [ "$ans" != "q" ]
do
case "$ans" in
1)
/bin/date
;;
2)
/usr/bin/who
;;
3)
/usr/bin/top
;;
q)
/bin/echo "Goodbye"
exit 0
;;
*)
/bin/echo "Invalid choice '$ans': please try again"
;;
esac
/bin/echo "Your choice:"
read ans
done
exit 0
Menggunakan ini di .authorized_keys
file Anda seperti:
command="/path/to/your/script.sh" <ssh-key>
... memberi Anda ini saat melakukan ssh
:
Welcome!
Your choices are:
1 See today's date
2 See who's logged in
3 See current processes
q Quit
Your choice:
scp
, sftp
dan semua hal lain yang mungkin berguna untuk Anda kelak.
command
opsi secara umum?
Pendekatan lain menggunakan misalnya shell terbatas untuk pengguna yang diberikan atau menggunakan pembungkus yang menahan perintah untuk semua file / skrip yang ditemukan di direktori tertentu, sehingga memungkinkan untuk menambah daftar perintah tanpa mengubah pembungkus.
Artikel lain menjelaskan skrip generik, yang juga memungkinkan argumen baris perintah ke perintah yang diizinkan, tetapi memungkinkan untuk menguncinya dengan aturan yang dinyatakan sebagai ekspresi reguler.
Contoh ini akan diungkapkan dengan cara berikut:
command="only systemctl shutdown"
Dan sebuah .onlyrules
file akan dibuat dengan konten ini:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
Keuntungan dari pendekatan 'satu-satunya' ini adalah bahwa tidak perlu menulis skrip individual untuk setiap pengguna dan situasi.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
) sehingga tersedia dalam skrip. Juga untuk memberikan contoh untuk skrip otomatis yang memungkinkan pola tertentuSSH_ORIGINAL_COMMAND
dijalankan. Lihat juga unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html