Komutlar ssh üzerinden toplu modda nasıl çalıştırılır?


9

Komutları ssh üzerinden toplu iş modunda nasıl çalıştırabilirim? Yani, sshkomutun eşdeğeri sftp -b <filename> <hostname>nedir?

Bağlanan bir dizi ana bilgisayar üzerinde çalıştırmak istediğim bir dizi komut var ssh. Üzerinde sftp, komutları bir dosyada saklar ve filenameana bilgisayara bağlanır ve komutları daha önce belirtilen komutu kullanarak çalıştırırım.

Böyle bir şey mümkün sshmü?


Bu soruyu yaşadım . Ama yine de komutları toplu modda nasıl çalıştıracağımı anlayamadım.
Srikanth

Ve bazıları lütfen #batchmode etiketi oluşturabilir ve bu soruyu buna etiketleyebilir mi?
Srikanth

Yanıtlar:


9

Yanılıyorsam beni düzeltin, ancak komut dosyasının yerel olduğu uzak sunucuda düzenli kabuk komutları çalıştırmak istiyor gibi görünüyorsunuz.

#!/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

Bunu kabuk ortamım yerine Python kullanarak test ortamımdaki bazı 'uzaktan yürütme' uygulamalarıyla yapıyorum ssh $userhost python < $pythonscriptfilename.


Cevap için teşekkürler. Öyle görünüyor. Biraz ince ayar yapıyorum ve şimdi deniyorum.
Srikanth

7

SSH karşılığı sftp -b <filename> <hostname>:

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


3

Basit tutmaya ve "toplu iş" dosyasını diğer bilgisayarda çalıştırmaya ne dersiniz?

  1. scp toplu iş dosyası user @ pc
  2. ssh kullanıcı @ pc toplu iş dosyası
  3. ssh kullanıcı @ pc rm toplu iş dosyası

Ve toplu iş dosyası normal bir kabuk betiği olacaktır, böylece sözdizimi iyi bilinir.




0

Ssh zorunlu komutlarını kullanabilirsiniz.

Bunlar belirli bir anahtarla ilişkilendirilir. Bu anahtarla kimlik doğrulaması yapıldığında, bu komut çalıştırılır ve bağlantı çıkar. Bu yaklaşımın bir avantajı daha fazla güvenliktir, çünkü bu durumda anahtar bir giriş kabuğuna ulaşmak için kullanılamaz.


0

Arcege'in senaryosuna başka bir seçenek de Bash işlevi olacaktır:

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
}

Her durumda onunla çalışmadığı için ssh -Tseçeneğini kullanmıyorum .

Bu komut dosyası, konumsal parametreler dizisinde parametre genişletme kullanır $@:

  • "${@:(-1)}" son parametreye genişler (kelimenin tam anlamıyla önce sondan itibaren)
  • "${#@}" konumsal parametre sayısına genişler
  • "${@:1:${#@}-1}" ilkinden sonrakine kadar tüm parametrelerin listesine genişler (kelimenin tam anlamıyla daha az sayıda parametre).

Bunun gibi değişken açılımlarda o kadar iyi değilim, neler olduğuna biraz ekleyebilir misiniz? Şerefe.
Guy

@Guy, işte burada - kodu yorumladım ve parametre genişletme hakkında bazı açıklamalar ekledim
gadamiak
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.