2012-01-25 11 views
5

मैं दूरस्थ रूप से एक स्क्रिप्ट चलाने की कोशिश कर रहा हूं (बैश स्क्रिप्ट से), लेकिन विश्लेषण के लिए आउटपुट को स्थानीय रूप से रीडायरेक्ट करने में परेशानी हो रही है। स्क्रिप्ट को चलाने में कोई समस्या नहीं है:परेशानी बैश स्क्रिप्ट को दूरस्थ रूप से चलाना, स्थानीय रूप से आउटपुट को रीडायरेक्ट करना

ssh -n -l "$user" "$host" '/home/user/script.sh $params' 

हालांकि मैं उस स्क्रिप्ट के आउटपुट को कैप्चर करने में असमर्थ हूं। मैंने निम्नलिखित कोशिश की है:

results=$(ssh -n -l "$user" "$host" '/home/user/script.sh $params') 
results=`ssh -n -l "$user" "$host" '/home/user/script.sh $params'` 
ssh -n -l "$user" "$host" '/home/user/script.sh $params' | grep "what I'm looking for" 
ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file 

कोई विचार?

ssh [email protected] "cat foo.tar" | tar xvf -- 

चीजों को सरल बनाने के लिए, ssh-keygen का उपयोग कर एक पब/निजी कुंजी युग्म उत्पन्न:

+0

http://stackoverflow.com/questions/12048906/capturing-ssh-output-as-variable-in-bash-script –

उत्तर

4
ssh [email protected] "ls -l" >output 

तुम भी जैसे काम कर सकें। ~/.ssh/authorized_keys में दूरस्थ होस्ट से कॉपी * .pub कुंजी, सुनिश्चित करें कि यह 600

chmod'd है तो फिर तुम

ssh मैं ~/.ssh/yourkey उपयोगकर्ता कर सकते हैं @ host.com ... आदि

और यह पासवर्ड भी नहीं मांगेगा। (यदि आपकी कुंजी जोड़ी पासवर्ड रहित है) ..

0

आप निश्चित रूप से कुछ गलत कर रहे हैं। मैंने अभी इसका परीक्षण किया और यह ठीक काम करता है।

[email protected] /tmp $ cat echo.sh 
#!/bin/bash 
echo "Hello WOrld"$1 
[email protected] /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo 
Hello WOrldfoo 
[email protected] /tmp $ ssh -n -l shadyabhi 127.0.0.1 '/tmp/echo.sh' foo > out 
[email protected] /tmp $ cat out 
Hello WOrldfoo 
0

खैर, ssh -n के लिए आदेश बिल्कुल काम करने के लिए, आप चीजों को सेट करने की है, ताकि आप एक पासवर्ड या पदबंध की जरूरत के बिना प्रवेश कर सकते हैं की जरूरत है (ताकि आप एक स्थानीय निजी कुंजी या तो SSH- के साथ उपलब्ध की जरूरत है एजेंट, या पासफ्रेज के बिना, और उस सार्वजनिक कुंजी को दूरस्थ मशीन पर उचित अधिकृत_की फ़ाइल में होना आवश्यक है)। लेकिन अगर ऐसा है, तो आपको क्या करना चाहिए ठीक है (उसने कई मशीनों पर मेरे लिए ठीक काम किया है)।

एक अन्य अजीब संभावना यह है कि यदि आपका रिमोट script.sh stdout/stderr के बजाय stdin या/dev/tty पर लिखने का प्रयास करता है। जो मामले में यह साथ ssh -n

+0

_write stdin_ करने के लिए - क्या आपका मतलब "से पढ़ें" ? – sarnold

0

एहसास

ssh -n -l "$user" "$host" '/home/user/script.sh $params' > results_file 

काम कर रहा था, अपेक्षा के अनुरूप काम नहीं होगा। यह केवल लॉक हो गया क्योंकि आउटपुट को रीडायरेक्ट किया जा रहा था (और स्क्रिप्ट को बनाने के लिए 5-6 मिनट लगेंगे), और इसलिए प्रदर्शित नहीं किया जा रहा था। सबको शुक्रीया।

0

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

$ cat ~/bin/ascript.sh 
echo one:$1 two:$2 three:$3 

$ params="squid whale shark" 
$ ssh localhost 'ascript.sh $params' 
one: two: three: 

$ ssh localhost "ascript.sh $params" 
one:squid two:whale three:shark 
संबंधित मुद्दे