Scp का उपयोग करते समय दूरस्थ रास्तों के लिए स्वतः पूर्णता कैसे सक्षम करें?


37

मैंने रिमोट का उपयोग करके अपने लैपटॉप में फ़ाइल कॉपी की:

scp someFile USER@192.168.178.32:/home/USER/put/it/some/where/oh/damn/you/here

मैं टैब मारकर दूरस्थ पथ को स्वत: पूर्ण करने में सक्षम होना चाहता हूं।


1
इसके लिए सक्षम है rsync, जो मेरी राय में अभी तक श्रेष्ठ हैscp
मार्को सेप्पी

3
यह डिफ़ॉल्ट रूप से सक्षम है zsh
स्टीफन जिमेनेज़

3
यह इसके लिए scpभी सक्षम है , कम से कम यह यहाँ काम करता है। आपको पहले से ही ssh- एजेंट में जोड़े गए ssh-key की आवश्यकता है।
20 अगस्त को enzotib

जवाबों:


24

सुनिश्चित करें कि आपने फैंसी ऑटोकंप्लीशन को चालू कर दिया है। कई वितरणों पर, इसका मतलब है कि आपकी ~/.bashrcआवश्यकताएं शामिल हैं . /etc/bash_completion

आपको पासवर्डलेस प्रमाणीकरण की आवश्यकता होगी, अर्थात एक कुंजी के साथ जो पहले से लोड है ssh-agent

एसएसएच कनेक्शन स्थापित करना धीमा है, इसलिए आप एक बार और सभी के लिए कनेक्शन स्थापित करके और उसके बाद उस कनेक्शन का उपयोग करके पूर्णता को गति दे सकते हैं। ssh -N -M target-hostमास्टर-स्लेव कनेक्शन स्थापित करने के बाद मास्टर एसएसएच कनेक्शन खोलने के लिए अपेक्षाकृत जटिल तरीका है ~/.ssh/config; निर्देशों के लिए एकल कमांड में एकाधिक ssh सत्र देखें (आपको विकल्प ControlMasterऔर ControlPathविकल्प की आवश्यकता है )।

सरल विधि SSHFS पर दूरस्थ फाइल सिस्टम को माउंट करना और cpसामान्य शेल पूर्णता के साथ उपयोग करना है।

mkdir ~/remote
sshfs USER@192.168.178.32:/home/USER ~/remote
cp -p someFile ~/remote/put/it/some/where/oh/damn/you/here

ऐसा लगता है कि /etc/bash_completionस्रोत में कुछ है ~/.bash_completion। मैं एक दूरस्थ सर्वर पर इस सुविधा को सक्षम करना चाहता हूं जहां मैं लिख नहीं सकता हूं /etc/और कोई भी नहीं है /etc/bash_completion(हालांकि वहाँ है /etc/bash_completion.d/। क्या ऐसा कोई संस्करण है जो मेरे होम निर्देशिका से चलाने के लिए सुरक्षित होगा? कम से कम एक संदर्भ है? ~ / .bash_completion इसलिए मुझे डर है कि वहाँ अधिक मैं गायब हूँ और एक चक्रीय लूप या कुछ और हो सकता है जो त्रुटियों का कारण हो सकता है।
redbmk

7

दूरस्थ मशीन में अपनी सार्वजनिक कुंजी जोड़ने के लिए मुझे बस इतना करना चाहिए:

cat ~/.ssh/id_rsa.pub | ssh USER@192.168.178.32 "cat - >> ~/.ssh/authorized_keys"

और अब scpटैब पूरा हो गया है।

यदि आपको पहले अपनी चाबियाँ सेट करने की आवश्यकता है, तो यहां देखें।


7
यह वही है जो ssh-copy-idइसके लिए है, और यह आपके लिए फ़ाइल अनुमतियों को संभाल लेगा।
ग्लेन जैकमैन 12

2

आप scp का उपयोग करने के बजाय lftp पर जा सकते हैं। यह आपको उस स्वचालित फ़ाइल स्थानांतरण के लिए एक अच्छा सुसंगत इंटरफ़ेस देता है जिसमें आप, और अधिक (यानी वाइल्डकार्ड) की तलाश में स्वत: पूर्ण सहित एसटीपी और sshp शामिल हैं।

lftp मछली: // उपयोगकर्ता @ मशीन

जैसे आप ऊपर scp के साथ ssh पर एक कनेक्शन खोलता है। कई मशीनें sftp का समर्थन करती हैं: // भी जो मेरे अनुभव में भी अच्छा है।


0

जैसे @Giles ने कहा है , सुनिश्चित करें कि आपने सेटअप ऑटो को पूरी तरह से ठीक किया है, आपके पास मशीन पर ssh कुंजी है।

मेरे इस विन्यास को जोड़ने ~/.ssh/configसे गति में भारी अंतर आया।

Host *
 ControlMaster auto
 ControlPath ~/.ssh/master-socket/%r@%h:%p
 ControlPersist 10s

यह प्रत्येक होस्ट के लिए एक मास्टर कनेक्शन बनाएगा।

कनेक्शन के स्वचालित रूप से बंद होने से पहले निर्देशिका को देखने के लिए 10s बनी रहती है।

दृढ़ता के बिना आपको एक कनेक्शन को फिर से बनाना होगा और यह आपके टैब को पूरा करने की गति को धीमा कर देगा।

उदाहरण

~$ scp mymachine:~/pa टैब

path/ palace/ pandas/ porn/

~$ scp mymachine:~/path/to टैब

~$ scp mymachine:~/path/to/file टैब

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