Sshfs के साथ कमांड लाइन में यूजरनेम और पासवर्ड


15

मैं एक छोटी बैकअप स्क्रिप्ट बना रहा हूँ sshfs:

sshfs backup_user@target_ip:/home /mnt/backup

क्या इस कमांड में पासवर्ड शामिल करने का कोई तरीका है?

या क्या कोई अन्य फ़ाइल स्थानांतरण समाधान है जहां लॉगिन पासवर्ड को एफ़टीपी / एसएफटीपी के अलावा अन्य शामिल किया जा सकता है?


4
आप RSA कुंजी युग्म उत्पन्न करने के लिए ssh-gkeygen का उपयोग कर सकते हैं फिर RSA प्रमाणीकरण का उपयोग करने के लिए ssh (क्लाइंट और सर्वर) कॉन्फ़िगर करें। क्या आपने "नियमित" ssh प्रमाणीकरण के लिए ऐसा किया है?
हवाफ

हाँ, लेकिन फिर मुझे सर्वर को ssh के माध्यम से कनेक्ट करने के तरीके को बदलना होगा .. जहाँ तक मुझे पता है कि प्रमाणीकरण एक ही समय में कुंजी आधारित या लॉगिन / पासवर्ड नहीं हो सकता है ..
Zaza

2
वे दोनों हो सकते हैं। वे आमतौर पर हैं। इस तरह, एक नव निर्मित उपयोगकर्ता अपना पासवर्ड दर्ज करके सर्वर पर अपनी कुंजी को धक्का दे सकता है। इसके बाद, वे अपनी कुंजी का उपयोग करते हैं।
xhienne

जवाबों:


12

-o password_stdinउदाहरण के लिए, फ्रीबीएसडी सभी प्रणालियों पर काम नहीं करता है। आदि।

आप expect इंटरप्रेटर का भी उपयोग कर सकते हैं , यह sshfs के साथ काम करना चाहिए और चाल करना चाहिए। उदाहरण के लिए,

एक अन्य समाधान यह होगा sshpassकि मान लीजिए कि आप निर्देशिका / var / www का समर्थन कर रहे हैं

समर्थन करना:

name=$(date '+%y-%m-%d')
mkdir /backup/$name && tar -czvf /backup/$name/"$name.tar.gz" /var/www

बैकअप फ़ाइल को बैकअप सर्वर पर अपलोड करना

sshpass -p "your_password" scp -r backup_user@target_ip:/home/ /backup/$name

तो यह आज के बैकअप के साथ डायरेक्टरी अपलोड करेगा

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

एक कुंजी जोड़ी को उचित तरीके से उत्पन्न करना

  • स्थानीय सर्वर पर

    ssh-keygen -t rsa
    
  • रिमोट सर्वर पर

    ssh root@remote_servers_ip "mkdir -p .ssh"
    
  • दूरस्थ सर्वर पर जनरेटेड सार्वजनिक कुंजी अपलोड करना

    cat ~/.ssh/id_rsa.pub | ssh root@remote_servers_ip "cat >> ~/.ssh/authorized_keys"
    
  • दूरस्थ सर्वर पर अनुमतियाँ सेट करें

    ssh root@remote_servers_ip "chmod 700 ~/.ssh; chmod 640 ~/.ssh/authorized_keys"
    
  • लॉग इन करें

    ssh root@remote_servers_ip
    
  • SSH प्रोटोकॉल v2 को सक्षम करना

    "/ 2 /" / ssh / sshd_config में "प्रोटोकॉल 2"

  • sshd में सार्वजनिक कुंजी प्राधिकरण सक्षम करना

    "/" / ssh / sshd_config ""

  • अगर StrictModes हां / etc / ssh / sshd_config पर सेट है

    restorecon -Rv ~/.ssh
    

15

मैनुअल के अनुसार, एक विकल्प है -o password_stdinजो मानक इनपुट से पासवर्ड को पढ़ने की अनुमति दे सकता है, जो शायद एक पुनर्निर्देशन हो सकता है। मैंने कभी इसका इस्तेमाल नहीं किया, इसलिए मैं अटकलें लगा रहा हूं।

उस ने कहा, मैं ऐसे समाधान के खिलाफ दृढ़ता से सलाह देता हूं जो स्वाभाविक रूप से असुरक्षित है।

sshनिजी / सार्वजनिक कुंजी की एक प्रणाली के साथ बहुत अच्छी तरह से काम करता है। यह सरल और सुरक्षित है। पासवर्ड लिखने या शेल स्क्रिप्ट में इसे स्पष्ट रूप से लिखने की आवश्यकता नहीं है। बस सर्वर पर अपनी सार्वजनिक कुंजी पुश करें और आप तुरंत कनेक्ट कर सकते हैं।


क्या कोई इस समाधान का एक कार्यशील उदाहरण प्रदान कर सकता है? मैं निम्नलिखित कोशिश कर रहा हूँ, लेकिन यह काम नहीं कर रहा है:printf "my_password\n" | sshfs username@hostname:/remote_fs $HOME/local_dir
मिकी

FYI करें, मुझे उल्लेख करना चाहिए कि मैं SSH कुंजी द्वारा संरक्षित पासवर्ड का उपयोग कर रहा हूँ। मैं @ nathan-s-watson-haigh द्वारा दिए गए उत्तर का उपयोग करके इसे प्राप्त करने में सक्षम था: यहाँ पाया गया: unix.stackexchange.com/questions/128974/…
मिकी

मेरे पास किसी भी तरह का मेल खाने वाला वातावरण नहीं है जो मुझे एक SSS कुंजी को पासवर्ड से संरक्षित SSH कुंजी का परीक्षण करने की अनुमति देगा। वैसे भी, आपकी आज्ञा पर सबसे पहले मुझे क्या होता है, मुझे कोई -o password_stdinविकल्प नहीं दिखता ।
xhienne

इनपुट के लिए धन्यवाद। मैंने अभी निम्न कमांड की कोशिश की, और यह पासवर्ड नहीं मांगता है, लेकिन यह भी वापस नहीं आता है। मतलब, यह सिर्फ कमांड के पूरा होने के इंतजार में बैठता है, कोई कमांड प्रॉम्प्ट प्रदर्शित नहीं होता है। मैंने कमांड की कोशिश की: printf "my_password\n" | sshfs -o password_stdin user@hostname:/ $HOME/local_dir PS मैं डेबियन बस्टर पीपीएस पर हूं यह काम करता है, लेकिन एक पासवर्ड के लिए संकेत देता है:sshfs -o password_stdin user@hostname:/ $HOME/local_dir
मिकी

12

बैश पर काम करने के लिए 'sshfs password'साथ पाइपिंग :<<<-o password_stdin

sshfs -o password_stdin backup_user@target_ip:/home /mnt/backup <<< 'sshfs password'

4
यह स्वीकृत उत्तर होना चाहिए .. किसी भी लिनक्स ओएस पर काम करता है।
आर्गन

इसलिए, इसे सिस्टम के साथ स्वचालित बढ़ते के लिए फ़ाइल mnt-media.mount में कैसे रखा जाए?
जोहो जोसे

एक सुपर मामूली टिप्पणी: यदि आपके पासवर्ड में विशेष BASH अक्षर हैं (जैसे धमाकेदार (!)), तो आपको पासवर्ड के लिए दोहरे उद्धरण चिह्नों के बजाय एकल उद्धरणों का उपयोग करना चाहिए।
काइल

6
echo 'password' | sshfs user@host:/dir /mnt -o password_stdin

"-O password_stdin" विकल्प वह है जो आपको अपना पासवर्ड पाइप करने में सक्षम बनाता है।

जब तक कि आपका सेवा प्रदाता आपको sftp के लिए उपयोग नहीं करने देता, तब तक कुंजी एक बेहतर विकल्प है। (यह WP इंजन की उल्लेखनीय विफलताओं में से एक है।)


क्या आप कृपया अपना उत्तर स्पष्ट कर सकते हैं। कोड की केवल एक पंक्ति एसई में अच्छे उत्तर के रूप में नहीं गिना जाता है
रोमियो निनोव

@RomeoNinov मैं कहूंगा कि यह पोस्ट इस सवाल का पर्याप्त जवाब देती है। हर कोई एक उपन्यास लिखने के लिए इच्छुक नहीं है, यह बताते हुए कि स्पष्ट क्यों है।
सातु कटुरा

@SatoKatsura साभार मैं चुनौती के लिए तैयार हूं।
इत्तोदोंत

2

एक बात का ध्यान रखें कि यदि आप -o password_stdinविकल्प का उपयोग कर रहे हैं , तो यह काम नहीं कर सकता है क्योंकि sshfs पूछेगा कि होस्ट से कनेक्ट करना है या नहीं (यदि यह पहली बार है जब आप इससे कनेक्ट होते हैं और यह जोड़ा नहीं जाता है अभी तक ज्ञात होस्ट फ़ाइल)। यदि आप इसे एक बैच में चला रहे हैं तो आप कभी भी sshfs को पूछते नहीं देखेंगे। इससे बचने के लिए समाधान:

  1. -o StrictHostKeyChecking=noविकल्पों को sshfs में जोड़ें या
  2. होस्ट को ज्ञात होस्ट फ़ाइल में जोड़ने के लिए मैन्युअल रूप से एक बार sshfs चलाएँ

यह पहेली का अंतिम टुकड़ा था! धन्यवाद!
१३:१६ में आयरनएगल

2

माउंट स्क्रिप्ट:

#!/bin/bash
server=<host>
user=<username>
pass=<password>
root=<hostpath>
mount=$(pwd)/sshfs

type sshfs >/dev/null 2>&1 || { echo >&2 "sshfs required"; exit 1; }
type sshpass >/dev/null 2>&1 || { echo >&2 "sshpass required"; exit 1; }

mkdir -p $mount

SSHPASS="$pass" sshfs $server:$root $mount -o ssh_command="sshpass -e ssh -l $user"

अनमाउंट:

#!/bin/bash

mount=$(pwd)/sshfs

fusermount -u $mount

0

स्वचालित स्क्रिप्ट sshfs के साथ sftp कनेक्ट करने के लिए

#!/bin/bash
expect <<END
spawn sshfs sftpuser@ip:/folder /mnt/folder -p 22 -o password_stdin
send "password\r"
expect eof
END
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.