SSH पर क्लिपबोर्ड पर इनपुट कॉपी करें?


33

यहाँ मेरा उपयोग मामला है:

  • मैं अक्सर काम के लिए एसएसएच पर अन्य कंप्यूटरों से जुड़ा हुआ हूं और मुझे अक्सर उदाहरण लिखने और पाठ साझा करने के लिए स्थानीय रूप से चल रहे संपादकों को सर्वर से दस्तावेजों / पाठ को कॉपी और पेस्ट करने की आवश्यकता होती है।
  • अक्सर, यदि पाठ काफी छोटा है, तो मैं बस अपने टर्मिनल प्रोग्राम (फिलहाल गनोम-टर्मिनल) से आउटपुट कॉपी करूँगा और पेस्ट करूँगा।
  • हालांकि, जब पूरे दस्तावेजों की बात आती है, तो मेरे विकल्प काफी सीमित हैं। मैं या तो दस्तावेज़ chunk-by-chunk की प्रतिलिपि बना सकता हूं, या scpइसे स्थानीय मशीन पर भेज सकता हूं ।

क्या प्रोग्राम का उपयोग करने का कोई तरीका है जैसे कि xclipमुझे stdinस्थानीय एक्स सर्वर के क्लिपबोर्ड पर रिमोट की प्रतिलिपि बनाने की अनुमति देगा ? के प्रभाव के लिए कुछ:

cat myconffile.conf | sed {...} | copy-over-ssh-to-local-clipboard

बहुत ही अच्छा होगा। क्या यह संभव बनाने के लिए कुछ मौजूद है?

जवाबों:


20

यदि आप X अग्रेषण के साथ ssh चलाते हैं, तो यह पारदर्शी है: दूरस्थ कमांड (सहित xclip) में आपके एक्स सर्वर (इसके कीबोर्ड सहित ) तक पहुंच है। सुनिश्चित करें कि आपने ForwardX11 yesअपने में ~/.ssh/configऔर X11Forwarding yesसर्वर में sshd_config(अपने वितरण पर निर्भर करता है, इन विकल्पों में डिफ़ॉल्ट रूप से चालू या बंद किया जा सकता है)।

<myconffile.conf sed {...} | xclip -i

दूरस्थ फ़ाइलों पर काम करने के अन्य तरीके हैं जो अधिक सुविधाजनक हो सकते हैं, उदाहरण के लिए SSHfs के साथ आपकी स्थानीय मशीन पर दूरस्थ निर्देशिकाओं को बढ़ाना , या ट्रैम्प के साथ Emacs में दूरस्थ फ़ाइलों को खोलना । यदि आपके पास ssh और FUSE सेट अप है और SSHfs स्थापित है, तो SSHfs उतना ही आसान है mkdir ~/net/myserver; sshfs myserver:/ ~/net/myserver। यदि आपने ssh सेट अप किया है और Emacs स्थापित किया है, तो Tramp खोलने में उतना ही आसान है /myserver:/path/to/file


1
गोपनीय फ़ाइल में डिफ़ॉल्ट रूप से इस तरह से चीजों को चलाने के लिए कोई सुरक्षा भेद्यता?
Naftuli Kay

नहीं, सभी X11 ट्रैफिक को SSH चैनल के माध्यम से अग्रेषित किया जाता है।
शादुर

2
@TKKocheran वास्तव में नहीं। सर्वर साइड पर, कोई नहीं। क्लाइंट पक्ष पर, थोड़ा, इसमें वह सर्वर व्यवस्थापक को आपके क्लाइंट में एक रास्ता देता है, लेकिन 99% मामलों में सर्वर व्यवस्थापक के पास वैसे भी एक रास्ता होता है; देखें कि क्या किसी को मेरे कंप्यूटर पर SSH में साइन इन किया गया है, क्या मैं उनके कंप्यूटर तक पहुँच सकता हूँ?
गिलेस एसओ- बुराई को रोकना '

7

आपको कुछ विशेष की आवश्यकता नहीं है; चूँकि xclipकाम करता है stdin, बस

ssh remotehost xclip < myconf.conf

इसे संशोधित करने की आवश्यकता क्यों होगी sed? sshएक टर्मिनल के रूप में उपयोग नहीं किए जाने पर डेटा के लिए पारदर्शी है, और आमतौर पर जैसे पाइपलाइनों में उपयोग किया जाता है

tar cfz - somedir | ssh remotehost 'cd destdir; tar xfz -'`

क्या मौजूदा एसएसएच सत्र के भीतर से ऐसा करने का कोई तरीका है? मैं वास्तव में एक और टर्मिनल विंडो खोलना पसंद नहीं करूंगा, अगर मेरे पास पहले से ही मशीन में एक खुला है।
नत्फुली के जूल

और sed` सिर्फ एक उदाहरण के रूप में है, अगर मैं stdinक्लिपबोर्ड पर कॉपी करने से पहले किसी भी प्रसंस्करण का प्रदर्शन करना चाहता हूं, तो मैं उस विकल्प को पसंद करूंगा।
नैफुली के

नहीं, मौजूदा sshसत्र में डेटा इंजेक्ट करने का कोई तरीका नहीं है (यदि आप कर सकते हैं तो यह बहुत सुरक्षित नहीं होगा)। आप ssh ControlMasterमौजूदा कनेक्शन पर अतिरिक्त कनेक्शन को मल्टीप्लेक्स करने के लिए सामान सेट कर सकते हैं , लेकिन यह वास्तव में शुरुआती लोगों के लिए कुछ नहीं है और आप इसे बाद में भी उसी तरह से करते हैं, दूसरे स्थानीय टर्मिनल पर स्विच करके और ऊपर कमांड चलाकर (जो एक नया नहीं खोलता है टर्मिनल विंडो)।
गीकॉइसर

@NaftuliKay आपके सामान्य SSH सत्र के अंदर काम करने वाले समाधान के लिए, मेरा उत्तर देखें ।
तानीस

5

यहां बताया गया है कि आप इसे अपने स्थानीय मशीन से OSX पर कैसे करेंगे

ssh remotehost.com "<some/file.txt" | pbcopy

3

यदि आपकी स्थानीय मशीन विंडोज़ चला रही है (7+) तो आप इसका इस्तेमाल कमांडलाइन से कर सकते हैं:

ssh user@server cat /home/user/file | clip

1

~ / .Ssh / config:

Host REMOTEHOST
    ...
    ForwardX11 yes

/ Etc / ssh / sshd_config:

X11Forwarding yes

दे घुमा के:

$ xclip -o | ssh REMOTEHOST 'DISPLAY=:0 xclip -i'

1

बहुत हद तक @ d-raev's और @ william-casarin समाधान के समान है, हालांकि, यह अलग है इसलिए मैं साझा कर रहा हूं कि मेरे लिए क्या काम किया।

आदेश

ssh user@host "cat <myconffile.conf" | xclip -sel clip

व्याख्या

यह उपयोग कर रहा है sshएक सुरक्षित सुरंग, करने के लिए प्रवेश बनाने के लिए user@ hostया ip, तो अमल catकी सामग्री को मुद्रित करने के लिए <myconffile.confकरने के लिए stdoutतो पाइप कि आदेश के लिए xclip -sel clipअपने स्थानीय मशीन है, जो की सामग्री स्थानों पर <myconffile.confअपने स्थानीय मशीन पर क्लिपबोर्ड में।

वास्तविक दुनिया उदाहरण उपयोग

मैं इस कमांड संरचना का उपयोग कार्यों के लिए करता हूं जैसे कि gshub में ssh कीज़ को चिपकाना (Ubuntu पर कमांड चलाने के बाद एक साधारण ctrl-V या पेस्ट चयन की अनुमति देना) Ubuntu 16.04 और 18.04 को। चेक आउट man ssh, man catऔर man xclipव्यवहार और विकल्प के विवरण के लिए।


यह भी बिना सिर वाले सर्वर से कॉपी करने के लिए काम करता है, जहां xclip
टैनस

0

मेरे पास LUbuntu के lxterminal( इसी तरह के विभिन्न टर्मिनलों का परीक्षण करने वाले) क्लिपबोर्ड को एक sshसत्र में चिपकाने के समान मुद्दा है । यदि क्लिपबोर्ड में सत्र टाइमआउट 100 से अधिक बाइट्स हैं और विफल रहता है।

अगर मैं ssh के माध्यम से लगभग किसी भी CentOS 5.x सर्वर से जुड़ता हूं और फिर लक्ष्य सर्वर से जुड़ता हूं, तो क्लिपबोर्ड पेस्ट बिना किसी उचित डेटा आकार के किसी भी मुद्दे के बिना काम करता है।


0

अपने सामान्य SSH सत्र के अंदर से एक हेडलेस सर्वर से लोकल क्लिपबोर्ड पर कॉपी करना:

  1. ncatअपने स्थानीय और दूरस्थ मशीन पर स्थापित करें । (आपकी दूरस्थ मशीन पर आप ncया सादे के साथ भी कर सकते हैं telnet, लेकिन स्थानीय मशीन पर हमें कमांड ( -c/ -e) निष्पादित करने के लिए विकल्पों की आवश्यकता होती है, जो ncसामान्य वितरण जैसे डेबियन और उबंटू में उपलब्ध नहीं हैं ।)

    apt install nmap
    
  2. अपनी स्थानीय मशीन पर, स्थानीय इंटरफ़ेस पर सुनने वाले सर्वर को सेट करें जो पोर्ट एक्स में आने वाली सामग्री को आपके एक्स क्लिपबोर्ड पर कॉपी करेगा:

    ncat --keep-open --listen --sh-exec "xclip -selection clipboard" localhost 10009
    

    या समकक्ष शॉर्टहैंड संस्करण का उपयोग करें:

    ncat -klc "xclip -sel c" localhost 10009
    
  3. एसएसएच रिमोट मशीन में इस तरह से होता है कि आपके स्थानीय मशीन (जहां आपका सर्वर सुन रहा है) पर रिमोट मशीन के पोर्ट 10008 से 10009 तक एक रिवर्स सुरंग स्थापित की जाती है। आप अपने सामान्य कार्य के लिए उस SSH सत्र का उपयोग कर सकते हैं।

    ssh -R 10008:localhost:10009 user@example.com
    
  4. जब आप किसी फ़ाइल की सामग्री को दूरस्थ मशीन से स्थानीय क्लिपबोर्ड पर कॉपी करना चाहते हैं, तो SSH शेल में निष्पादित करें:

    ncat --send-only localhost 10008 < file.txt
    

    और हां, यह अच्छा है जब शेल शॉर्टकट या स्क्रिप्ट के रूप में पैक किया जाता है। हम इसे rclipसुप्रसिद्ध में "[कॉपी टू] रिमोट क्लिपबोर्ड" के लिए कह सकते हैं xclip

लाभ

  • दूरस्थ मशीन के लिए एक और एसएसएच सत्र खोलने की आवश्यकता नहीं है।

  • xclipरिमोट मशीन पर कोई ज़रूरत नहीं है , इसलिए यह काम करता है यदि आप इसे स्थापित नहीं कर सकते हैं या इसका उपयोग नहीं कर सकते क्योंकि यह एक्स के बिना एक हेडलेस सर्वर है।

सुरक्षा

हम ncat -l localhost 10009सर्वर के लिए करते हैं, जिसका अर्थ है कि यह केवल localhostआईपी ​​पते के साथ नेटवर्क इंटरफेस पर सुनता है । यह स्थानीय लूप इंटरफ़ेस केवल आपकी स्वयं की मशीन से कनेक्शन की अनुमति देता है (सहित, इस मामले में, एसएसएच के माध्यम से उन सुरंगों को उलटा)। तो भले ही आप फ़ायरवॉल के पीछे न हों, आपका पोर्ट 10009 इंटरनेट पर किसी के सामने नहीं आता है।

स्रोत

लिनक्स के लिए काम करने के लिए gist dergachev / ssh-forward-clipboard.md से अनुकूलित । उस सार में SSH रिवर्स सुरंग को डिफ़ॉल्ट बनाने के निर्देश भी शामिल हैं।


-1

https://secure.wikimedia.org/wikipedia/en/wiki/Base64

आप अपने क्लिपबोर्ड डेटा को बेस 64 के साथ एएससीआईआई टेक्स्ट में बदल सकते हैं। फिर आप पहले से ही मौजूद एसएसएच कनेक्शन के माध्यम से इसे आगे बढ़ा सकते हैं।


कुछ भी क्यों परिवर्तित करें? यह इस मामले में पहले से ही पाठ है और यहां तक ​​कि अगर यह द्विआधारी था तो कोई कारण नहीं होगा कि आप इसे इस तरह से एक पाइप लाइन में नहीं भेज सकते।
कालेब

क्लिपबोर्ड में बाइनरी डेटा हो सकता है, उदाहरण के लिए: एक संकलित अनुप्रयोग
लांसबैन्स

हाँ, यह हो सकता है, लेकिन यह एक समस्या क्यों होगी? बाइनरी डेटा को एक पाइप और ssh सुरंग के माध्यम से स्थानांतरित किया जा सकता है।
कालेब
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.