Yanıtlar:
Hayır. "İzin verilen" komut değil, "zorunlu" komut ( ForceCommand seçeneği olarak).
Tek olasılık, farklı komutlar için farklı anahtarlar kullanmak veya parametreleri okumaktır stdin
.
Her tuş için yalnızca bir komutunuz olabilir, çünkü komut “zorunlu” dur.
Ancak bir sarmalayıcı komut dosyası kullanabilirsiniz. Çağrılan komut orijinal komut satırını $SSH_ORIGINAL_COMMAND
değerlendirebileceği ortam değişkeni olarak alır .
Örneđin bunu koy ~/.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
Daha sonra içine referans ~/.ssh/authorized_keys
ile
command="/home/user/.ssh/allowed-commands.sh",…
O'Reilly'nin harika SSH'si olan Güvenli Kabuk: Kesin Kılavuz kitabında, sekizinci bölümde, aşağıdaki gibi bir komut dosyası kullanılarak verilen güzel bir örnek var:
#!/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
Bunu .authorized_keys
dosyanızda şu şekilde kullanmak :
command="/path/to/your/script.sh" <ssh-key>
... bunu yaparken 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
ve tüm diğer şeyler, bir gün yarayabilecek.
command
seçenek genel olarak geçerli değil mi?
Diğer yaklaşımlar, örneğin, söz konusu kullanıcı için kısıtlanmış bir kabuk kullanır veya belirli bir dizinde bulunan tüm dosyalara / komut dosyalarına komutları kısıtlayan ve böylece sargıyı değiştirmeden komut listesini genişletmeye izin veren bir sarıcı kullanır.
Başka bir makalede , izin verilen komutlara komut satırı bağımsız değişkenlerine de izin veren, ancak bunları normal ifadeler olarak ifade edilen kurallarla kilitlemeye izin veren genel bir komut dosyası açıklanır.
Bu örnek şu şekilde ifade edilebilir:
command="only systemctl shutdown"
Ve .onlyrules
bu içerikle bir dosya hazırlanmış olacak:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
Bu 'tek' yaklaşımın avantajı, her kullanıcı ve durum için ayrı komut dosyaları yazmaya gerek olmamasıdır.
ForcedCommand
SSH_ORIGINAL_COMMAND
(perman sshd
) ekleyen sshd'nin kendisini daha açık hale getirmeye değer olabilir . Ayrıca belirli kalıplarınSSH_ORIGINAL_COMMAND
çalışmasına izin veren otomatik komut dosyalarına örnek vermek . Ayrıca bkz. Unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html