Ssh पर बैच मोड में कमांड कैसे चलाएं?


9

मैं ssh पर बैच मोड में कमांड कैसे चला सकता हूं? यही है, sshकमांड के समकक्ष क्या है sftp -b <filename> <hostname>?

मेरे पास कमांड का एक सेट है जिसे मैं मेजबानों को जोड़ने वाले एक सेट पर चलाना चाहता हूं ssh। ओवर sftp, मैं कमांड्स को एक फाइल में स्टोर करता हूं filenameऔर होस्ट से कनेक्ट करता हूं और पहले से बताई गई कमांड का उपयोग करके कमांड चलाता हूं ।

क्या ऐसा कुछ संभव है ssh?


मैं इस सवाल से गुजरा हूं । लेकिन मैं अभी भी समझ नहीं पा रहा था कि कमांड्स को बैच मोड में कैसे चलाया जाए।
श्रीकांत

और क्या कोई एक टैग #batchmode बना सकता है और इस प्रश्न को टैग कर सकता है?
श्रीकांत

जवाबों:


9

अगर मैं गलत हूं तो मुझे सुधारें, लेकिन आप दूरस्थ सर्वर पर नियमित शेल कमांड चलाना चाहते हैं जहां स्क्रिप्ट स्थानीय है।

#!/bin/sh
trap "rm -f /tmp/sendonssh.$$.*" 0 1 2 3 15
# commands to run on the remote server
cat <<'EOF' >> /tmp/sendonssh.$$.sh
mkdir -p /tmp/foobar.$$
mv $HOME/xyzzy /tmp/foobar.$$
chmod 640 $HOME/xyzzy
EOF
# call for each argument
for userhost in "$@"; do
    errorout=`ssh -aTxo BatchMode=yes $userhost /bin/sh -s < /tmp/sendonssh.$$.sh 2>&1`
    rc=$?
    if [ $rc -ne 0 ]; then
        echo "Error: $userhost: $errorout"
        exit $rc
    fi
done

मैं शेल के बजाय पायथन का उपयोग करके अपने परीक्षण वातावरण में कुछ 'दूरस्थ निष्पादन' ऐप के साथ ऐसा करता हूं ssh $userhost python < $pythonscriptfilename:।


जवाब के लिए धन्यवाद। जो दिखता है। मैं इसे थोड़ा ट्विक कर रहा हूं और अभी इसे आजमा रहा हूं।
श्रीकांत

7

SSH के बराबर sftp -b <filename> <hostname>होगा:

ssh -o BatchMode=yes <hostname> sh -s < "<filename>"


3

इसे कैसे सरल रखें और दूसरे कंप्यूटर पर "बैच" फ़ाइल चलाएं?

  1. scp बैच-फ़ाइल उपयोगकर्ता @ पीसी
  2. ssh उपयोगकर्ता @ पीसी बैच-फ़ाइल
  3. ssh उपयोगकर्ता @ पीसी आरएम बैच-फाइल

और बैच फ़ाइल एक सामान्य शेल स्क्रिप्ट होगी ताकि वाक्य रचना अच्छी तरह से ज्ञात हो।


0

man expect? : \

लेकिन यह सही तरीका नहीं है।


हाय johnny8888, मैं सोलारिस सर्वर पर हूं और उम्मीद के लिए कोई मैनुअल प्रविष्टि नहीं है। क्या आप कृपया अपना उत्तर विस्तृत कर सकते हैं?
श्रीकांत


@ श्रीकांत: expectऐसे कार्यक्रमों के साथ बातचीत करने के लिए डिज़ाइन किया गया है जो एक टर्मिनल पर चलने की उम्मीद करते हैं। यह ssh पर कमांड चलाने की समस्या से संबंधित नहीं है।
गिल्स एसओ- बुराई को रोकना '


0

आप ssh मजबूर कमांड का उपयोग कर सकते हैं।

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


0

आर्स द्वारा स्क्रिप्ट का एक अन्य विकल्प एक बैश फ़ंक्शन होगा:

sshbatch() {
  # Expect at least 2 parameters, if less are provided print help
  if [[ ${#@} -lt 2 ]]; then
    printf 'Usage: sshbatch [user@]host... input_file\n'
  else
    while read -r -u "$fd" host; do
      # Check if the last parameter is a readable file, else print error and exit
      [[ -r ${@:(-1)} ]] || { printf "The file ${@:(-1)} is not readable!\n"; break; }
      # Run remote bash from the file given in the last parameter
      ssh -o BatchMode=yes "$host" bash -s < "${@:(-1)}"
      # Read host list from 1st to next to last parameters
    done {fd}< <(printf '%s\n' "${@:1:${#@}-1}")
  fi
}

मैं ssh के -Tविकल्प का उपयोग नहीं करता, क्योंकि यह सभी मामलों में इसके साथ काम नहीं करता है।

यह स्क्रिप्ट स्थितिगत पैरामीटर सरणी पर पैरामीटर विस्तार का उपयोग करती है $@:

  • "${@:(-1)}" अंतिम पैरामीटर तक फैलता है (शाब्दिक रूप से पहले अंत के बाद)
  • "${#@}" स्थितीय मापदंडों की संख्या का विस्तार
  • "${@:1:${#@}-1}" पहली से अंतिम तक के सभी मापदंडों की सूची में विस्तार किया गया है (शाब्दिक रूप से मापदंडों की संख्या कम है)।

मैं इस तरह के चर विस्तार पर इतना अच्छा नहीं हूं, क्या आप इस पर थोड़ा जोड़ पाएंगे कि क्या चल रहा है? चीयर्स।
गाइ

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