Scp में पासवर्ड कैसे पास करें?


296

मुझे पता है कि यह अनुशंसित नहीं है, लेकिन क्या उपयोगकर्ता के पासवर्ड को पास करने के लिए यह संभव है?

मैं एक बैच जॉब के हिस्से के रूप में scp के माध्यम से फाइल कॉपी करना चाहता हूं और प्राप्त करने वाला सर्वर, निश्चित रूप से, पासवर्ड की आवश्यकता है और, नहीं, मैं आसानी से उस कुंजी-आधारित प्रमाणीकरण में नहीं बदल सकता।


2
यह भी देखें (बाद में) प्रश्न: stackoverflow.com/questions/1462284/… जहां एक उत्तर में ऐसा करने के लिए एक और संभावित तरीके का उल्लेख किया गया है। (एनबी: यह एक डुप्लिकेट प्रश्न नहीं है - यह मूल है जो अन्य डुप्लिकेट करता है।)
जोनाथन लेफ्लर

जवाबों:


35

आप इसे उम्मीद जैसे उपकरण के साथ स्क्रिप्ट कर सकते हैं ( पाइथन के लिए Pexpect की तरह आसान बाइंडिंग भी हैं )।


1
उम्मीद के लिए लिंक । Nist.gov टूट गया है। शायद यह ?: उम्मीद। sourceforge.net
कैटापोफैटिको


>> शराब की भठ्ठी जानकारी sshpass त्रुटि: "sshpass" नाम के साथ कोई भी उपलब्ध सूत्र हम sshpass नहीं जोड़ेंगे क्योंकि यह SSH की सुरक्षा को बर्बाद करने के लिए नौसिखिया SSH उपयोगकर्ताओं के लिए बहुत आसान बनाता है। ;)
लुकास एनपी एगर

528

Sshpass का प्रयोग करें :

sshpass -p "password" scp -r user@example.com:/some/remote/path /some/local/path

या तो पासवर्ड बैश इतिहास में नहीं दिखता है

sshpass -f "/path/to/passwordfile" scp -r user@example.com:/some/remote/path /some/local/path

उपरोक्त प्रतियां दूरस्थ होस्ट से आपके स्थानीय तक पथ की सामग्री को कॉपी करती हैं।

इंस्टॉल :

  • ubuntu / डेबियन
    • apt install sshpass
  • CentOS / Fedora
    • yum install sshpass
  • mac w / macports
    • port install sshpass
  • मैक डब्ल्यू / काढ़ा
    • brew install https://raw.githubusercontent.com/kadwanev/bigboybrew/master/Library/Formula/sshpass.rb

14
उबंटू 12.04 पर यह केवल मेरे लिए पासवर्ड पर एकल उद्धरण (जैसे "पासवर्ड" के बजाय 'पासवर्ड') के साथ काम करता है।
odedfos

6
@odedfos, हाँ आपको सिंगल कोट्स का उपयोग करने की आवश्यकता है क्योंकि कुछ पासवर्ड जनरेट किए गए वर्णों में दोहरे उद्धृत स्ट्रिंग प्रक्षेप में एक विशेष व्याख्या हो सकती है
टेरी

7
यह आप कैसे स्थापित करते हैं sshpassapt-get install sshpass
Jan-Terje Sørensen

6
CentOS पर यह हैyum -y install sshpass
jgritty

19
ऐसा करने का सबसे सुरक्षित तरीका पासवर्ड फ़ाइल के साथ है , जैसे: sshpass -f passwdfile` scp [...] . This way, the password won't show up in ps` लिस्टिंग, आदि और आप फ़ाइल अनुमतियों के साथ पासवर्ड की सुरक्षा कर सकते हैं।
क्रिस्टोफर शुल्त्स

49

बस एक ssh कुंजी उत्पन्न करें:

ssh-keygen -t rsa -C "your_email@youremail.com"

की सामग्री की प्रतिलिपि बनाएँ ~/.ssh/id_rsa.pub और अंत में इसे दूरस्थ मशीनों में जोड़ें~/.ssh/authorized_keys

सुनिश्चित करें कि दूरस्थ मशीन की अनुमति है 0700 for ~./ssh folderऔर0600 for ~/.ssh/authorized_keys


35
जैसा कि मैंने लिखा था: नहीं, मैं आसानी से कुंजी-आधारित प्रमाणीकरण पर स्विच नहीं कर सकता।
अर्गलबर्गल

3
क्या आपका मतलब है .authorized_keys के बजाय। authorization_keys?
हैलोवर्ल्ड

2
इसके लिए एक वैध उपयोग एक बैश स्क्रिप्ट होगा जो एक सर्वर पर कई एसपीपी / एसएचएस कॉल करता है जहां आप उपयोगकर्ता से रिमोट सर्वर के पासवर्ड के लिए पूछना चाहते हैं। तब पासवर्ड इतिहास में नहीं दिखाई देगा और आपके पास अभी भी पासवर्ड के लिए चुनौतीपूर्ण होने की संभावना है ... लेकिन केवल एक बार। मैं एक कुंजी फ़ाइल का उपयोग नहीं करना चाहता क्योंकि मैं अभी भी स्क्रिप्ट उपयोगकर्ता को प्रमाणित करना चाहता हूं।
वेस अनुदान

2
यदि आप लक्ष्य पर कुंजी-आधारित प्रमाणीकरण को आसानी से सक्षम नहीं कर सकते हैं तो एक और वैध उपयोग होगा। उदाहरण: मुख्य NAS उत्पादकों में से एक - उनके DSM 6.0 के साथ पर्यायवाची - 2016 में भी इसका समर्थन नहीं करता है। निश्चित रूप से, आप कॉन्फ़िगरेशन फ़ाइलों के साथ गड़बड़ी कर सकते हैं और आशा करते हैं कि अपडेट इसे फिर से अधिलेखित नहीं करेगा (DSM को अपडेट करना अक्सर कस्टम संशोधनों को तोड़ता है )। कभी-कभी - खासकर जब ओपी स्पष्ट रूप से लिखता है कि वे पहले से ही जानते हैं कि यह इष्टतम नहीं है - लोगों को बस एक समाधान की आवश्यकता है।
aaह

3
आप का उपयोग करना चाहिए ssh-copy-id -i ~/.ssh/id_rsa.pub <remote_server>दूरस्थ सर्वर पर कुंजी कॉपी करने के लिए
RousseauAlexandre

39

यदि आप विंडोज से सर्वर से कनेक्ट कर रहे हैं, तो scp ("pscp") का पुट्टी संस्करण आपको पासवर्ड को -pwपैरामीटर के साथ पास करने देता है ।

इसका उल्लेख यहाँ प्रलेखन में किया गया है।


1
कृपया एक उदाहरण दिखाएं।
२३:२३ में एसडीसोलर

इसके अलावा, इन कमांड का उपयोग करने के लिए अपने पथ में C: \ Program Files (x86) \ PuTTY जोड़ना चाह सकते हैं।
एसडीसोलर

1
@SDsolar यहाँ एक वाक्यविन्यास उदाहरण है: pscp -pw 'MyPa$$word' username@servername:/somedir/somefile ~/somedest(मैं इस तरह पोटीन का उपयोग करने से नफरत करता हूं, लेकिन यह काम करता है)
Genorama

29

कर्ल एक फाइल की प्रतिलिपि बनाने के लिए एक विकल्प के रूप में इस्तेमाल किया जा सकता है और यह कमांडलाइन पर एक पासवर्ड का समर्थन करता है।

curl --insecure --user username:password -T /path/to/sourcefile sftp://desthost/path/

यह 'scp' की तुलना में काफी धीमा है, लेकिन यह काम ठीक करता है।
विक्टर

जब गंतव्य एक विशाल पासवर्ड प्रॉम्प्ट देरी से कॉन्फ़िगर किया गया हो तो मैंने इसे और तेज़ पाया। scpमुझे पासवर्ड डालने के लिए 30+ सेकंड इंतजार करना होगा, लेकिन curlतुरंत काम किया।
घोस्ट .४ Sep२ २०

@ Ghost8472 ने हाँ कॉन्फ़िगर किया है, लेकिन कभी-कभी यह देरी होस्टनाम को हल कर रही है, और sftp के लिए भी होती है।
मैकेंज़्म

1
मैं "कर्ल: (1) प्रोटोकॉल" sftp "समर्थित या अक्षम libcurl में नहीं मिला"
kronuus

21

आप यूनिक्स / टर्मिनल पर 'उम्मीद' स्क्रिप्ट का उपयोग कर सकते हैं

उदाहरण के लिए 'test.exp' बनाएं:

#!/usr/bin/expect
        spawn scp  /usr/bin/file.txt root@<ServerLocation>:/home
        set pass "Your_Password"
        expect {
        password: {send "$pass\r"; exp_continue}
                  }

स्क्रिप्ट चलाएँ

expect test.exp 

मुझे आशा है कि वह मदद करेंगे।


7
पूर्वापेक्षाएँ:
सूडो एप्ट

10

यहाँ एक उदाहरण है कि आप इसे expectउपकरण के साथ कैसे करते हैं :

sub copyover {
    $scp=Expect->spawn("/usr/bin/scp ${srcpath}/$file $who:${destpath}
+/$file");
    $scp->expect(30,"ssword: ") || die "Never got password prompt from
+ $dest:$!\n";
    print $scp 'password' . "\n";
    $scp->expect(30,"-re",'$\s') || die "Never got prompt from parent 
+system:$!\n";
    $scp->soft_close();
    return;
}

2
यह बहुत गलत है, क्षमा करें कि मैंने ऐसा नहीं लिखा। (5 साल पहले :))
एस्पो

8

किसी ने भी इसका उल्लेख नहीं किया है, लेकिन पासवर्ड के लिए पुट्टी एससीपी (पीएससीपी) के पास -pw विकल्प है।

प्रलेखन यहाँ पाया जा सकता है: https://the.earth.li/~sgtatham/putty/0.67/htmldoc/Chapter5.html#pscp


9
5 साल पहले user524607 के उत्तर में इसका उल्लेख किया गया था।
बरमार

यह मिला, और मैं अपने पथ में C: \ Program Files (x86) \ PuTTY जोड़ रहा हूं।
एसडीसोलर

3

आप ssh-copy-idssh कुंजी जोड़ने के लिए उपयोग कर सकते हैं :

$which ssh-copy-id #check whether it exists

यदि मौजूद है:

ssh-copy-id  "user@remote-system"

3

एक बार जब आप ssh-keygenऊपर बताए अनुसार सेट कर लेंगे, तो आप कर सकते हैं

scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

यदि आप हर बार टाइपिंग कम करना चाहते हैं, तो आप अपनी .bash_profileफ़ाइल को संशोधित कर सकते हैं और डाल सकते हैं

alias remote_scp='scp -i ~/.ssh/id_rsa /local/path/to/file remote@ip.com:/path/in/remote/server/

फिर अपने टर्मिनल से करें source ~/.bash_profile। बाद में यदि आप remote_scpअपने टर्मिनल में टाइप करते हैं तो यह scpबिना पासवर्ड के कमांड चलाना चाहिए ।


2
  1. सुनिश्चित करें कि आपके पास पहले "उम्मीद" उपकरण है, यदि नहीं, तो करें

    # apt-get install expect

  2. निम्नलिखित सामग्री के साथ एक स्क्रिप्ट फ़ाइल बनाएँ। (# vi / रूट / स्क्रिप्टफाइल)

    spawn scp /path_from/file_name user_name_here@to_host_name:/path_to

    expect "password:"

    send put_password_here\n;

    interact

  3. स्क्रिप्ट फ़ाइल को "उम्मीद" टूल के साथ निष्पादित करें

    # expect /root/scriptfile


1

इस ब्लॉग पोस्ट के आधार पर यहां एक गरीब आदमी का लिनक्स / पायथन / एक्सपेक्ट जैसे उदाहरण हैं: सरल गोले को पूरी तरह से इंटरैक्टिव टीटीएस में अपग्रेड करना । मुझे पुरानी मशीनों के लिए इसकी आवश्यकता थी जहां मैं अपेक्षा को स्थापित नहीं कर सकता या पायथन में मॉड्यूल नहीं जोड़ सकता।

कोड:

(
    echo 'scp jmudd@mysite.com:./install.sh .'
    sleep 5
    echo 'scp-passwd'
    sleep 5
    echo 'exit'
) |

python -c 'import pty; pty.spawn("/usr/bin/bash")'

आउटपुट:

scp jmudd@mysite.com:install.sh .
bash-4.2$ scp jmudd@mysite.com:install.sh .
Password: 
install.sh                                 100%   15KB 236.2KB/s   00:00    
bash-4.2$ exit
exit

0

एक विकल्प लक्ष्य प्रणाली पर अधिकृत-कुंजी फ़ाइल के लिए उपयोगकर्ता की कुंजी का सार्वजनिक आधा जोड़ देगा। जिस सिस्टम से आप ट्रांसफर शुरू कर रहे हैं, उस पर आप ssh- एजेंट डेमॉन चला सकते हैं और एजेंट के लिए कुंजी का निजी आधा जोड़ सकते हैं। फिर बैच की नौकरी को कुंजी के पासवर्ड के लिए संकेत देने के बजाय, निजी कुंजी प्राप्त करने के लिए एजेंट का उपयोग करने के लिए कॉन्फ़िगर किया जा सकता है।

यह या तो UNIX / Linux सिस्टम पर या विंडोज प्लेटफॉर्म पर pageant और pscp का उपयोग करने में सक्षम होना चाहिए।


4
सवाल ने कहा कि वह कुंजी-आधारित प्रमाणीकरण का उपयोग नहीं कर सकता है।
बरमार

2
इसके अलावा, अगर यह मैं था, मुझे लगता है कि मैं दूसरे सर्वर को बदल नहीं सकता - मैं चाहता हूं कि एक फाइल की प्रतिलिपि बनाई जाए।
२३:३४ पर एसडीसोलर

-1

ऊपर उल्लिखित सभी समाधान केवल तभी काम कर सकते हैं जब आप ऐप इंस्टॉल करते हैं या आपके पास सिवाय या sshpass के स्थापित करने के लिए व्यवस्थापक अधिकार होना चाहिए।

मुझे यह बहुत ही उपयोगी लिंक मिला, बस बैकग्राउंड में scp को शुरू करने के लिए।

$ nohup scp file_to_copy user@server:/path/to/copy/the/file > nohup.out 2>&1

https://charmyin.github.io/scp/2014/10/07/run-scp-in-background/


1
पासवर्ड इनपुट में बैकग्राउंड में scp कैसे चलेगा ??
थॉमस।


-9

मैं यह वास्तव में मददगार जवाब पाया यहाँ

rsync -r -v --progress -e ssh user@remote-system:/address/to/remote/file /home/user/

न केवल आप पासवर्ड पास कर सकते हैं, बल्कि यह कॉपी करते समय प्रगति बार दिखाएगा। वाकई शानदार।


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