यह उत्तर अधिक सुरक्षा जोड़कर चुने गए उत्तर पर दोनों का विकास करता है ।
उस उत्तर पर सामान्य रूप में चर्चा हुई
<command that makes output> | \
ssh <user A>@<host A> <command that maps stdin to clipboard>
कहाँ सुरक्षा की कमी की जा सकती है में है sshअनुमतियों की अनुमति देता है <user B>पर host B>करने के लिए sshमें host Aऔर निष्पादित किसी भी आदेश।
बेशक उपयोग Bकरने के लिए Aपहले से ही एक sshकुंजी द्वारा gated किया जा सकता है , और इसमें एक पासवर्ड भी हो सकता है। लेकिन सुरक्षा की एक और परत स्वीकार्य आदेशों के दायरे को प्रतिबंधित कर सकती है, जो कि Bनिष्पादित कर सकते हैं A, जैसे कि rm -rf /इसे नहीं बुलाया जा सकता है। (यह विशेष रूप से महत्वपूर्ण है जब sshकुंजी नहीं है में पासवर्ड है।)
सौभाग्य से, sshएक अंतर्निहित सुविधा है जिसे कमांड प्रतिबंध या मजबूर कमांड कहा जाता है । देखें ssh.com , या इस serverfault.com सवाल ।
नीचे दिया गया समाधान सामान्य प्रतिबंध के साथ-साथ कमांड प्रतिबंध को भी दर्शाता हैssh लागू है।
कमांड प्रतिबंध के साथ उदाहरण समाधान जोड़ा गया
यह सुरक्षा वर्धित समाधान सामान्य रूप का अनुसरण करता है - sshसत्र से कॉल host-Bबस है:
cat <file> | ssh <user-A>@<host A> to_clipboard
यह बाकी काम करने के लिए सेटअप दिखाता है।
का सेटअप Ssh कमांड प्रतिबंध
मान लीजिए कि उपयोगकर्ता खाता Bहै user-B, और B के पास एक ssh कुंजी है id-clip, जिसे सामान्य तरीके से बनाया गया है (ssh-keygen )।
फिर user-Aएक ssh निर्देशिका में एक फ़ाइल है
/home/user-A/.ssh/authorized_keys
कि कुंजी को पहचानता है id-clipऔर अनुमति देता हैssh कनेक्शन की है।
आमतौर पर प्रत्येक पंक्ति की सामग्री authorized_keysसार्वजनिक कुंजी अधिकृत होती है, उदाहरण के लिए, सामग्रीid-clip.pub ।
हालाँकि, कमांड प्रतिबंध लागू करने के लिए कि कमांड द्वारा सार्वजनिक कुंजी सामग्री (उसी लाइन पर) को निष्पादित किया जाना है।
हमारे मामले में:
command="/home/user-A/.ssh/allowed-commands.sh id-clip",no-agent-forwarding,no-port-forwarding,no-user-rc,no-x11-forwarding,no-pty <content of file id-clip.pub>
निर्दिष्ट कमांड "/home/user-A/.ssh/allowed-commands.sh id-clip", और केवल उस निर्दिष्ट कमांड को निष्पादित id-clipकिया जाता है, जब भी कुंजी का उपयोग किया जाता है तो एक sshकनेक्शन शुरू किया जाता है host-A- कोई बात नहीं जो sshकमांड लाइन लिखी जाती है ।
कमांड एक स्क्रिप्ट फ़ाइल को इंगित करता है allowed-commands.sh, और उस स्क्रिप्ट फ़ाइल की सामग्री है
#/bin/bash
#
# You can have only one forced command in ~/.ssh/authorized_keys. Use this
# wrapper to allow several commands.
Id=${1}
case "$SSH_ORIGINAL_COMMAND" in
"to-clipboard")
notify-send "ssh to-clipboard, from ${Id}"
cat | xsel --display :0 -i -b
;;
*)
echo "Access denied"
exit 1
;;
esac
sshमशीन पर मूल कॉल Bथा
... | ssh <user-A>@<host A> to_clipboard
स्ट्रिंग to-clipboardको allowed-commands.shपर्यावरण चर द्वारा पारित किया गया है SSH_ORIGINAL_COMMAND। जोड़, हमने कुंजी का नाम पारित किया है id-clip, उस रेखा से authorized_keysजिसमें केवल द्वारा एक्सेस किया गया हैid-clip ।
रेखा
notify-send "ssh to-clipboard, from ${Id}"
सिर्फ एक पॉपअप मैसेजबॉक्स है जिससे आपको पता चलता है कि क्लिपबोर्ड लिखा जा रहा है - यह शायद एक अच्छा सुरक्षा फीचर भी है। ( notify-sendउबंटू 18.04 पर काम करता है, शायद अन्य नहीं)।
कतार में
cat | xsel --display :0 -i -b
पैरामीटर --display :0आवश्यक है क्योंकि इस प्रक्रिया में क्लिपबोर्ड के साथ स्वयं का एक्स डिस्प्ले नहीं है, इसलिए इसे स्पष्ट रूप से निर्दिष्ट किया जाना चाहिए। यह मान :0वैनलैंड विंडो सर्वर के साथ Ubuntu 18.04 पर काम करने के लिए होता है। अन्य सेटअप पर यह काम नहीं कर सकता है। एक मानक X सर्वर के लिए यह उत्तर मदद कर सकता है।
host-A /etc/ssh/sshd_config मापदंडों
अंत में /etc/ssh/sshd_configमेजबान पर कुछ पैरामीटर जिन्हें Aकनेक्ट करने की अनुमति सुनिश्चित करने के लिए सेट किया जाना चाहिए, और sshकेवल पासवर्ड के बिना उपयोग करने की अनुमति :
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
AllowUsers user-A
बनाने के लिए sshdसर्वर config फिर से पढ़
sudo systemctl restart sshd.service
या
sudo service sshd.service restart
निष्कर्ष
इसे स्थापित करने के लिए यह कुछ प्रयास है, लेकिन इसके अलावा अन्य कार्यों का to-clipboardनिर्माण समान ढांचे के समानांतर किया जा सकता है।
:'<,'>w !ssh desktop pbcopy