Bagaimana menjalankan perintah dalam mode batch melalui ssh?

9

Bagaimana saya bisa menjalankan perintah dalam mode batch lebih dari ssh? Artinya, apa sshyang setara dengan perintah itu sftp -b <filename> <hostname>?

Saya memiliki seperangkat perintah yang ingin saya jalankan di set host yang terhubung ssh. Atas sftp, saya menyimpan perintah dalam file filenamedan terhubung ke host dan menjalankan perintah menggunakan perintah yang disebutkan sebelumnya.

Apakah hal seperti itu mungkin berakhir ssh?

Srikanth
sumber
Saya telah melewati pertanyaan ini . Tapi saya masih tidak tahu bagaimana menjalankan perintah dalam mode batch.
Srikanth
Dan bisakah seseorang membuat tag #batchmode dan menandai pertanyaan ini?
Srikanth

Jawaban:

9

Perbaiki saya jika saya salah, tetapi Anda tampaknya ingin menjalankan perintah shell biasa pada server jauh di mana skrip lokal.

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

Saya melakukan ini dengan beberapa 'eksekusi jarak jauh' aplikasi dalam lingkungan pengujian saya menggunakan Python bukannya shell: ssh $userhost python < $pythonscriptfilename.

Arcege
sumber
Terima kasih atas jawabannya. Itu terlihat seperti itu. Saya sedikit men-tweak dan mencobanya sekarang.
Srikanth
7

Setara SSH sftp -b <filename> <hostname>akan menjadi:

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

MattBianco
sumber
3

Bagaimana membuatnya sederhana dan menjalankan file "batch" di komputer lain?

  1. scp batch-file pengguna @ pc
  2. ssh user @ pc-file batch
  3. ssh user @ pc rm batch-file

Dan file batch akan menjadi skrip shell yang normal sehingga sintaksis sudah dikenal.

Johan
sumber
0

man expect? : \

tapi itu bukan cara yang sempurna.

LanceBaynes
sumber
Halo johnny8888, saya menggunakan server Solaris dan tidak ada entri manual untuk mengharapkan. Bisakah Anda jelaskan jawaban Anda?
Srikanth
@Srikanth linux.die.net/man/1/expect
Michael Mrozek
@Srikanth: expectdirancang untuk berinteraksi dengan program yang diharapkan berjalan pada terminal. Ini tidak terkait dengan masalah menjalankan perintah di atas ssh.
Gilles 'SANGAT berhenti menjadi jahat'
0

mungkin

ssh user@host sh -c "$(<filename)"
glenn jackman
sumber
0

Anda dapat menggunakan perintah yang dipaksakan ssh.

Ini terkait dengan kunci tertentu. Ketika otentikasi dilakukan dengan kunci itu, perintah itu dijalankan dan koneksi keluar. Salah satu keuntungan dari pendekatan ini adalah peningkatan keamanan, karena dalam hal ini kunci tidak dapat digunakan untuk sampai ke shell login.

Faheem Mitha
sumber
0

Opsi lain untuk skrip oleh Arcege adalah fungsi Bash:

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
}

Saya tidak menggunakan -Topsi ssh , karena tidak berfungsi dengan baik dalam semua kasus.

Script ini menggunakan ekspansi parameter pada array parameter posisi $@:

  • "${@:(-1)}" memperluas ke parameter terakhir (secara harfiah pertama membentuk akhir dan seterusnya)
  • "${#@}" memperluas ke jumlah parameter posisi
  • "${@:1:${#@}-1}" memperluas ke daftar semua parameter dari pertama ke berikutnya ke terakhir (secara harfiah jumlah parameter kurang satu).
Gadamiak
sumber
Saya tidak begitu baik dalam ekspansi variabel seperti itu, apakah Anda dapat menambahkan sedikit tentang apa yang terjadi? Bersulang.
Guy
@Beli, ini dia - Saya mengomentari kode dan menambahkan beberapa penjelasan tentang ekspansi parameter
gadamiak