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?


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.


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>"


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.




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.


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).

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.