यह उत्तर अधिक सुरक्षा जोड़कर चुने गए उत्तर पर दोनों का विकास करता है ।
उस उत्तर पर सामान्य रूप में चर्चा हुई
<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