जवाबों:
नहीं, यह "अनुमत" कमांड नहीं है, लेकिन "मजबूर" कमांड ( फोर्सकोमांड विकल्प के रूप में )।
एकमात्र संभावना विभिन्न कमांड के लिए अलग-अलग कुंजियों का उपयोग करना या मापदंडों को पढ़ना है stdin
।
आपके पास प्रति कुंजी केवल एक कमांड हो सकती है, क्योंकि कमांड "मजबूर" है।
लेकिन आप एक रैपर स्क्रिप्ट का उपयोग कर सकते हैं। पर्यावरण कमांड के रूप में मूल कमांड लाइन को कमांड कहा जाता है $SSH_ORIGINAL_COMMAND
, जिसका वह मूल्यांकन कर सकता है।
जैसे इस में डाल दिया ~/.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
फिर इसके ~/.ssh/authorized_keys
साथ संदर्भ दें
command="/home/user/.ssh/allowed-commands.sh",…
महान SSH में, द सिक्योर शेल: ओ'रेली द्वारा निश्चित गाइड बुक, अध्याय आठ में, निम्नलिखित की तरह एक स्क्रिप्ट का उपयोग करके एक अच्छा उदाहरण दिया गया है:
#!/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
इसे अपनी .authorized_keys
फ़ाइल में उपयोग करना जैसे:
command="/path/to/your/script.sh" <ssh-key>
... ऐसा करते समय आपको देता है 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
और अन्य सभी सामान आपको किसी दिन उपयोगी मिल सकते हैं।
command
सामान्य रूप से विकल्प के लिए मान्य नहीं है ?
अन्य दृष्टिकोण दिए गए उपयोगकर्ता के लिए एक प्रतिबंधित शेल का उपयोग करते हैं या एक रैपर का उपयोग करते हैं जो एक विशेष निर्देशिका में मिली फ़ाइलों / लिपियों के लिए आदेशों को नियंत्रित करता है, इस प्रकार आवरण को बदले बिना आदेशों की सूची को बढ़ाने की अनुमति देता है।
एक अन्य लेख में एक सामान्य लिपि का वर्णन किया गया है, जो आदेशित आदेशों के लिए कमांड लाइन तर्कों को भी अनुमति देता है, लेकिन उन्हें नियमित अभिव्यक्ति के साथ व्यक्त नियमों के साथ लॉक करने की अनुमति देता है।
इस उदाहरण को निम्न तरीके से व्यक्त किया जाएगा:
command="only systemctl shutdown"
और .onlyrules
इस सामग्री के साथ एक फाइल तैयार की जाएगी:
\:^systemctl restart cups$:{p;q}
\:^shutdown -r now$:{p;q}
इस 'केवल' दृष्टिकोण का लाभ यह है कि प्रत्येक उपयोगकर्ता और स्थिति के लिए अलग-अलग स्क्रिप्ट लिखने की आवश्यकता नहीं है।
ForcedCommand
SSH_ORIGINAL_COMMAND
(प्रतिman sshd
) ताकि यह लिपियों में उपलब्ध हो। स्वचालित स्क्रिप्ट के लिए एक उदाहरण देने के लिए जो कुछ पैटर्नSSH_ORIGINAL_COMMAND
को चलाने की अनुमति देता है । यह भी देखें unixwars.blogspot.com/2014/12/getting-sshoriginalcommand.html