SSH का उपयोग करके किसी फ़ाइल को दूरस्थ रूप से कैसे लिखें


41

मैं एक दूरस्थ लिनक्स मशीन में एक फाइल कॉपी कर सकता हूं जिसमें कोई समस्या नहीं है

scp file user@host: /pathtowrite_file

हालाँकि, मुझे एक लाइनक्स मशीन से दूसरी फ़ाइल में लिखने में कठिनाई हो रही है। यहाँ मैंने क्या प्रयास किया है:

echo 'Some Text' > /remotefile.txt | ssh user@remotehost

मुझे जो नोटिस मिला है, वह है

स्टडिन: एक tty नहीं है

किसी भी दर पर, दूरस्थ मशीन पर फ़ाइल 'कुछ पाठ' भेजे गए पाठ को प्रतिबिंबित नहीं करती है।

जवाबों:


70

आप दूरस्थ फ़ाइल बनाने के लिए "बिल्ली" कमांड का उपयोग कर सकते हैं।

echo 'Some Text' | ssh user@remotehost -T "cat > /remotefile.txt"

-Tअक्षम छद्म टर्मिनल आवंटन और संदेश प्राप्त करने से रोकता है,

स्यूडो-टर्मिनल आवंटित नहीं किया जाएगा क्योंकि स्टडिन एक टर्मिनल नहीं है।


लेकिन, मैं दूरस्थ मशीन पर मौजूदा फ़ाइल को लिखना चाहता हूं।
दम

2
"कैट> /remotefile.txt" रिमोट मशीन पर चलता है और यदि आप किसी मौजूदा फ़ाइल को ">" "" "" से बदलना चाहते हैं
Aragorn

@suffa: क्या आप किसी मौजूदा फ़ाइल को जोड़ने की कोशिश कर रहे हैं? या क्या आप फ़ाइल को अधिलेखित करना चाहते हैं, लेकिन यदि यह पहले से मौजूद नहीं है तो विफल हो जाए? और क्या?
डेविड श्वार्ट्ज

@ डेविड श्वार्ट्ज - या तो। मैं इसे अधिलेखित करना और विफल होना चाहूंगा, अगर यह बाहर नहीं निकलता है ... लेकिन, मैं इस बिंदु पर सिर्फ अपील करना चाहूंगा।
19

`गूंज 'कुछ पाठ' | ssh उपयोगकर्ता @ रिमोटहोस्ट" tee -a /remotefile.txt "` मेरे लिए भी काम किया।
बस सेठ

10

अन्य उत्तर की तुलना में थोड़ा छोटा:

ssh user@remotehost "echo Some Text > /remotefile.txt"

3
सच; यह काम करेगा - यदि दूरस्थ फ़ाइल में पाठ की एक पंक्ति लिखना वास्तव में सभी ओपी को करना चाहता है। प्रश्न में कमांड प्रूफ-ऑफ-कॉन्सेप्ट टेस्ट की तरह दिखता है। सवाल कहता है, "एक लिनक्स मशीन से दूसरे फ़ाइल में लिखना।" यदि उपयोगकर्ता एक मनमाना कमांड (या कमांड का क्रम) चलाना चाहता है - और न केवल एक echo- स्थानीय रूप से, तो आपका उत्तर मदद नहीं करता है, और स्वीकृत उत्तर इसे करने का तरीका है।
स्कॉट

इस दृष्टिकोण का उपयोग कर @ कई कमांड भी संभव हैं। अधिकांश चीजों की तरह लिनक्स, TMTOWTDI: ssh localhost "echo 'hi'; echo 'hello'; echo 'well, hello there!'
g33kz0r

कूल दोस्त, डाउनवोट के लिए धन्यवाद। मुझे लगता है कि वास्तव में मेरी बात को संबोधित करने की तुलना में आसान है? अपनी टिप्पणी के ऊपर PS कोई मतलब नहीं है।
g33kz0r

1
ठीक है, आप चाहते हैं और अधिक आलोचना? (१) दुनिया में आप क्यों कह रहे हैं ssh localhost? वह सिर्फ पानी को गंदा कर रहा है, इसे साफ नहीं कर रहा है। (२) अपने संशोधित उदाहरण में पुनर्निर्देशन नहीं दिखाने से, आप यह सवाल उठाते हैं कि क्या आप जानते हैं कि समूह कमांड को कैसे जानते हैं और सभी आउटपुट को एक फाइल में भेजते हैं। … (Cont'd)
स्कॉट

1
(Cont'd) ... (3) आपने "पाठ की एक पंक्ति" वाक्यांश पर ध्यान केंद्रित करके मेरी बात को याद किया है। मेरा कहना यह था कि ओपी कुछ और अधिक परिष्कृत करना चाहता है जो दूरस्थ फ़ाइल में ज्ञात पाठ लिख रहा है - वह एक स्थानीय कमांड चलाना और आउटपुट को दूरस्थ फ़ाइल में भेजना चाह सकता है , जैसे कि । यदि आप उस सामान्य मामले को संबोधित करने के लिए अपने उत्तर को अनुकूलित कर सकते हैं, तो कृपया ऐसा करें। command (localhost) > file (remotehost)
स्कॉट

6

किसी फ़ाइल में संलग्न करने के लिए dd का उपयोग करना भी संभव है । शायद थोड़ा अस्पष्ट लेकिन उपयोगी है अगर रिमोट होस्ट पर आउटपुट पुनर्निर्देशन संभव नहीं है।

cat ~/.ssh/id_rsa.pub | ssh user@remote.host 'dd of=.ssh/authorized_keys oflag=append conv=notrunc'

यह उदाहरण दूरस्थ होस्ट पर अधिकृत_की फ़ाइल में आपकी सार्वजनिक कुंजी जोड़ता है।

(स्रोत: http://www.rsync.net/resources/howto/ssh_keys.html )


3

यह आपके क्लिपबोर्ड की सामग्री को मैक पर ले जाएगा और इसे दूरस्थ रूप से फ़ाइल के अंत में जोड़ देगा:

pbpaste | ssh root@my.machine.remote 'cat >> ~/.ssh/authorized_keys'

यह आपको दूरस्थ होस्ट पर फ़ाइल के अंत में लिखने (परिशिष्ट) देने की अनुमति देता है:

echo "Append string to file" | ssh root@my.machine.remote 'cat >> ~/.ssh/authorized_keys'

1

यदि कई बार उपयोग किया जाना है तो इस कोड का उपयोग करना आसान हो सकता है। "Sshpass" टूल के साथ, ssh आपको स्क्रिप्ट के प्रत्येक इनवोकेशन के लिए पासवर्ड के लिए संकेत नहीं देगा। (जब तक आपको इसे गुप्त रखने की आवश्यकता न हो, तब तक इसका उपयोग न करें)

Sshpass के बारे में अधिक जानकारी के लिए: https://stackoverflow.com/questions/12202587/automatically-enter-ssh-password-with-script

#!/bin/bash

SCRIPT="echo 'nameserver 8.8.8.8' > /etc/resolv.conf"        

if [ "$#" -ne 1 ]; then
        echo "Wrong number of arguments. usage: prog dest_machine"
else
        sshpass -p "root" ssh -o StrictHostKeyChecking=no root@"$1" "${SCRIPT}"
fi

क्या की तुलना में अधिक सहज? यह अनिवार्य रूप से g33kz0r के उत्तर (लगभग दो साल पहले से) के समान है, साथ ही कुछ घंटियाँ और सीटी भी हैं जो विशेष रूप से स्पष्ट नहीं हैं। कम से कम आपके द्वारा जोड़े गए सामान की व्याख्या करें।
स्कॉट

यदि आपकी स्क्रिप्ट बहुत सारे तर्कों के साथ दी जाती है, तो यह एक त्रुटि संदेश जारी करता है कि बहुत कम तर्क हैं।
जी-मैन का कहना है कि 'मोनिका'

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

1

आप बस का उपयोग कर सकते viया nanoया picoसंपादक:

# Just replace "vi" with "nano" or "pico" if you want to use them.
vi remotefile.txt

हालांकि, आपको इसके बाद Some Textअपने आप से संपादक में लिखना होगा , इसलिए यह प्रक्रिया वास्तव में बैच-संगत नहीं है।


-1

नीचे एक स्क्रिप्ट बनाएं:

# !/bin/bash

read -p "Enter target server IP : " server
echo "Enter root password for $server : " ; read -s password

yum install sshpass -y

sshpass -p "$password" ssh -o strictHostKeyChecking=no root@$server echo "your text goes here" >> /remotefile.txt

मैं नीचे की ओर देखता हूं - किसी ऐसे व्यक्ति से सबसे अधिक संभावना है जो एक नए आदेश का उपयोग yumबहुत अच्छे कारण के बिना नहीं करेगा । यह उत्तर दिखाता है कि कैसे लेकिन क्यों नहीं। (पल के लिए रद्द करना रद्द करना - मुझे आशा है कि आप इसे और अधिक संदर्भ प्रदान करने के लिए संपादित करेंगे)
एसडीसोलर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.