Rsync SSH कमांड के लिए स्वचालित रूप से पासवर्ड कैसे पास करें?


111

मुझे मैन्युअल रूप से पासिंग पासवर्ड की आवश्यकता के बिना इसे करने की आवश्यकता rsyncहै sshऔर इसे स्वचालित रूप से करना चाहते हैं ssh

जवाबों:


44

आपको स्क्रिप्टेड ssh लॉगिन के लिए पासफ़्रेज़ के बिना कीफ़ाइल का उपयोग करना चाहिए। यह स्पष्ट रूप से एक सुरक्षा जोखिम है, इस बात का ख्याल रखें कि कीफाइल पर्याप्त रूप से सुरक्षित है।

पासवर्ड रहित ssh पहुँच स्थापित करने के निर्देश


9
कमांड के पाठ में पासवर्ड डालने की कोई संभावना नहीं है?
13

3
आसानी से नहीं, ssh में इसके लिए कोई विकल्प नहीं है
मैड साइंटिस्ट

यह ध्यान दिया जाना चाहिए कि ऐसा करना हमेशा संभव नहीं होता है (जैसे कई एंड्रॉइड ssh सर्वर कार्यान्वयन काफी सीमित हैं)।
पॉन्काडूडल

@Ponkadoodle ओपी क्लाइंट-साइड अनुरोधों के बारे में है, न कि सर्वर-साइड। ssh -iग्राहक पक्ष पर हमेशा संभव होना चाहिए। क्या आपका मतलब है कि सर्वर सभी कुंजी-प्रकारों (जैसे ईसीडीएसए) का समर्थन नहीं कर सकता है? यह एक प्रमुख मुद्दा नहीं होगा, हालांकि, केवल उपयोग करने का मामला है ssh-keygen -t। क्या मैं कुछ भूल रहा हूँ?
जोनाथन एच।

1
हालांकि यह पहली बार में परेशानी का कारण हो सकता है, यह सही उत्तर है। पासवर्ड संवेदनशील जानकारी है, और इन्हें प्रोग्राम में स्पष्ट, या लापरवाही से संग्रहीत नहीं किया जाना चाहिए। कीफाइल क्या हैं; बस पहचान फ़ाइलों केrsync -essh -i बारे में जानें , और
जोनाथन एच।

94

"Sshpass" गैर-इंटरैक्टिव ssh पासवर्ड प्रदाता उपयोगिता का उपयोग करें

उबंटू पर

 sudo apt-get install sshpass

Rsync को कमांड दें

 /usr/bin/rsync -ratlz --rsh="/usr/bin/sshpass -p password ssh -o StrictHostKeyChecking=no -l username" src_path  dest_path

4
मुझे पता है कि यह सबसे अच्छा अभ्यास नहीं है, लेकिन मुझे एक अपंग एसएसएचडी के साथ एक एनएएस मिला है जो कुंजी-आधारित स्थिति नहीं करेगा। यह उत्तर मेरी स्वचालित बैकअप पहेली के लिए अनुपलब्ध था। तो अंतिम उपाय के उत्तर के लिए +1
माइक गोसमैन

8
यदि आप कीफ़ाइल का उपयोग नहीं कर सकते हैं, लेकिन कमांड में पासवर्ड शामिल नहीं करना चाहते हैं, तो आप इसे एक अस्थायी फ़ाइल में लिख सकते हैं और इसे इस तरह शामिल कर सकते हैं sshpass -p`cat .password` ssh [...]:। फिर अपनी .passwordफ़ाइल को सुरक्षित करके chmod 400 .passwordसुनिश्चित करें कि केवल आपका उपयोगकर्ता ही इसे पढ़ सकता है।
lutuh

5
पूर्णता के लिए, दूरस्थ सर्वर पर src_pathserver01.mydomain.local:/path/to/folder
ssh'ing

यह निश्चित रूप से सही जवाब है! यह आपको ssh जादू के बिना स्क्रिप्टिंग करने की अनुमति देता है, बस एक स्क्रिप्टिंग। ;)
कुदोस

1
चूँकि -arsync पर स्विच शामिल है -rlptgoD, आप इस तरह से कमांड को छोटा कर सकते हैं:rsync -az ...
Jannie Theunissen

24

आप जिस विकल्प का उपयोग करना चाहते हैं उस पासवर्ड के लिए rsyncपर्यावरण चर सेट करके या कमांड का उपयोग करके पासवर्ड प्रॉम्प्ट से बच सकते हैं ।RSYNC_PASSWORD--password-file


41
केवल तभी काम करता है जब गंतव्य सर्वर में rsync डेमॉन चल रहा हो
Darryl Hebbes

4
भले ही यह जवाब तब तक मदद नहीं करता जब तक कि rsync डेमॉन का उपयोग न करें, Google ने मुझे यहां उतारा और यह वही था जिसकी मुझे आवश्यकता थी। मेरे लिए, मुझे rsyncd को सीधे rsync की आवश्यकता थी, कोई ssh नहीं। मैंने बस पासवर्ड-फ़ाइल विकल्प का उपयोग किया, और एक स्क्रिप्ट के लिए पूरी तरह से काम किया।
gregthegeek

14

यदि आप सार्वजनिक / निजी कुंजी का उपयोग नहीं कर सकते हैं, तो आप अपेक्षा का उपयोग कर सकते हैं:

#!/usr/bin/expect
spawn rsync SRC DEST
expect "password:"
send "PASS\n"
expect eof
if [catch wait] {
    puts "rsync failed"
    exit 1
}
exit 0

आपको अपने सामान्य rsync स्रोत और गंतव्य मापदंडों के साथ SRC और DEST को बदलना होगा और PASS को अपने पासवर्ड से बदलना होगा। बस सुनिश्चित करें कि यह फ़ाइल सुरक्षित रूप से संग्रहीत है!


3
उन आदेशों पर उपलब्ध मेरीRed Hat Enterprise Linux Server release 5.11 (Tikanga)
क्रै

13

मुझे यह इस तरह काम करने के लिए मिला:

sshpass -p "password" rsync -ae "ssh -p remote_port_ssh" /local_dir  remote_user@remote_host:/remote_dir

क्या करने के remote_port_sshलिए सेट किया जाएगा? यह वास्तविक मूल्य के लिए एक प्लेसहोल्डर की तरह दिखता है।
मैक्स विलियम्स

6

एक ssh कुंजी का उपयोग करें।

ssh-keygenऔर देखो ssh-copy-id

उसके बाद आप rsyncइस तरह से उपयोग कर सकते हैं :

rsync -a --stats --progress --delete /home/path server:path

अगर मैं ssh के साथ कुंजी का उपयोग करता हूं तो मैं लिखता हूं: ssh u @ serv -i//aa लेकिन इसे rsync में कैसे करें?
लीसल्ड

2
यदि आप अपनी .sh निर्देशिका में कुंजी रखते हैं और इसे एक मानक नाम देते हैं (आमतौर पर id_rsa / id_rsa.pub) तो यह rsync द्वारा स्वचालित रूप से उठाया जाएगा।
क्रेग व्यापारी

6

एक और दिलचस्प संभावना:

  1. RSA या DSA कुंजी युग्म उत्पन्न करें (जैसा कि यह वर्णित किया गया था)
  2. सार्वजनिक कुंजी को होस्ट करें (जैसा कि पहले ही वर्णित है)
  3. Daud:
rsync --partial --progress --rsh = "ssh -i dsa_pStreet_file" host_name @ host: / home / me / d।

नोट: -i dsa_pStreet_file जो आपकी RSA / DSA निजी कुंजी है

मूल रूप से, यह दृष्टिकोण @Mad साइंटिस्ट द्वारा वर्णित एक के समान है, हालांकि आपको अपने निजी ~ ~ / ssh को कॉपी करने की आवश्यकता नहीं है। दूसरे शब्दों में, यह तदर्थ कार्यों (एक समय पासवर्ड रहित पहुंच) के लिए उपयोगी है


5

निम्नलिखित मेरे लिए काम करता है:

SSHPASS='myPassword'
/usr/bin/rsync -a -r -p -o -g --progress --modify-window=1 --exclude /folderOne -s -u --rsh="/usr/bin/sshpass -p $SSHPASS ssh -o StrictHostKeyChecking=no -l root"  source-path  myDomain:dest-path  >&2

मुझे स्थापित करना था sshpass


2
-एक पहले से ही-surptgoDD का अर्थ है और सामान्य तौर पर, यहां कमांड लाइन को कम करना बहुत अधिक उपयोगी होगा।
क्रिश्चियन

4

स्वचालित रूप से rsync कमांड के लिए पासवर्ड दर्ज करना मुश्किल है। समस्या से बचने का मेरा सरल उपाय है कि फोल्डर को बैकअप के लिए माउंट किया जाए। फिर माउंटेड फोल्डर का बैकअप लेने के लिए लोकल rsync कमांड का उपयोग करें।

mount -t cifs //server/source/ /mnt/source-tmp -o username=Username,password=password
rsync -a /mnt/source-tmp /media/destination/
umount /mnt/source-tmp

3

हालाँकि आप पहले ही इसे अब तक लागू कर चुके हैं,

आप किसी भी अपेक्षा के कार्यान्वयन का उपयोग कर सकते हैं (आपको पर्ल, पायथन: pexpect, paramiko, आदि) में विकल्प मिलेंगे।


2

मैं विंडोज प्लेटफॉर्म पर ऐसा करने के लिए एक वीबीएसस्क्रिप्ट फ़ाइल का उपयोग करता हूं, यह मुझे बहुत अच्छी तरह से सर्वर करता है।

set shell = CreateObject("WScript.Shell")
shell.run"rsync -a Name@192.168.1.100:/Users/Name/Projects/test ."
WScript.Sleep 100
shell.SendKeys"Your_Password"
shell.SendKeys "{ENTER}"

2

आधिकारिक समाधान (और अन्य) तब अपूर्ण थे जब मैं पहली बार आया था, इसलिए मैं वर्षों बाद वापस आया, इस वैकल्पिक दृष्टिकोण को पोस्ट करने के लिए यदि कोई अन्य व्यक्ति सार्वजनिक / निजी कुंजी-जोड़ी का उपयोग करने का इरादा रखता है, तो यहां

इसे लक्ष्य बैकअप मशीन से निष्पादित करें, जो स्रोत से लक्ष्य बैकअप के लिए खींचती है

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' user@10.9.9.3:/home/user/Server/ /home/keith/Server/

स्रोत मशीन से इसे निष्पादित करें, जो स्रोत से लक्ष्य को बैकअप के लिए भेजता है

rsync -av --delete -e 'ssh -p 59333 -i /home/user/.ssh/id_rsa' /home/user/Server/ user@10.9.9.3:/home/user/Server/

और, यदि आप ssh के लिए एक वैकल्पिक पोर्ट का उपयोग नहीं कर रहे हैं, तो नीचे दिए गए अधिक सुरुचिपूर्ण उदाहरणों पर विचार करें:

इसे लक्ष्य बैकअप मशीन से निष्पादित करें, जो स्रोत से लक्ष्य को लक्षित करने के लिए खींचती है:

sudo rsync -avi --delete user@10.9.9.3:/var/www/ /media/sdb1/backups/www/

स्रोत मशीन से इसे निष्पादित करें, जो स्रोत से लक्ष्य को बैकअप के लिए भेजता है:

sudo rsync -avi --delete /media/sdb1/backups/www/ user@10.9.9.3:/var/www/

यदि आपको अभी भी पासवर्ड के लिए संकेत दिया जा रहा है, तो आपको अपने ssh कॉन्फ़िगरेशन की जांच करने /etc/ssh/sshd_configऔर यह सत्यापित करने की आवश्यकता है कि स्रोत में मौजूद उपयोगकर्ता और लक्ष्य प्रत्येक के पास प्रत्येक भेजकर दूसरों की संबंधित ssh कुंजी है ssh-copy-id user@10.9.9.3

(फिर, यह एक वैकल्पिक दृष्टिकोण के रूप में, बिना पासवर्ड के ssh की-पेयर का उपयोग करने के लिए है, कि किसी फ़ाइल के माध्यम से पासवर्ड पास करने के लिए।)


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

-1

एंड्रयू सीफोर्ड द्वारा पोस्ट किए गए विचार के बाद, यह sshfs का उपयोग करके किया जाता है:

echo "SuperHardToGuessPass:P" | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no user@example.com:/mypath/ /mnt/source-tmp/ -o workaround=rename -o password_stdin
rsync -a /mnt/source-tmp/ /media/destination/
umount /mnt/source-tmp
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.