Cara menggunakan SSH untuk menjalankan sebuah shell script pada mesin remote?

Aku harus menjalankan shell script (windows/Linux) pada mesin remote.

Saya punya SSH dikonfigurasi pada kedua mesin A dan B. naskah Saya adalah pada mesin yang akan menjalankan beberapa kode pada mesin remote, mesin B.

Lokal dan komputer remote dapat berupa Windows atau Unix berbasis sistem.

Apakah ada cara untuk menjalankan melakukan ini dengan menggunakan plink/ssh?

Mengomentari pertanyaan (9)

Jika Mesin A adalah Jendela kotak, anda dapat menggunakan Plink (bagian dari Dempul) dengan parameter-m, dan akan mengeksekusi script lokal pada remote server.

plink root@MachineB -m local_script.sh

Jika Mesin A adalah sistem berbasis Unix, anda dapat menggunakan:

ssh root@MachineB 'bash -s' < local_script.sh

Seharusnya kau't harus copy script ke remote server untuk menjalankannya.

Komentar (19)

Ini adalah pertanyaan lama, dan Jason's jawaban yang bekerja dengan baik, tapi saya ingin menambahkan ini:


ssh user@host 
Komentar (13)

Juga, don't lupa untuk melarikan diri variabel jika anda ingin menjemput mereka dari host tujuan.

Ini telah menarik saya keluar di masa lalu.

Misalnya:

user@host> ssh user2@host2 "echo \$HOME"

mencetak /home/user2

sementara

user@host> ssh user2@host2 "echo $HOME"

mencetak /home/user

Contoh lain:

user@host> ssh user2@host2 "echo hello world | awk '{print \$1}'"

mencetak "hello" benar.

Komentar (3)

Ini adalah sebuah ekstensi untuk YarekT's jawaban untuk menggabungkan inline remote perintah dengan melewati ENV variabel dari mesin lokal ke remote host sehingga anda dapat mengukur script anda pada sisi remote:


ssh user@host ARG1=$ARG1 ARG2=$ARG2 'bash -s' 
Komentar (3)
$ ssh user@hostB "ls -la"

Yang akan meminta anda untuk password anda, kecuali jika anda telah disalin anda hostA pengguna's kunci publik untuk authorized_keys file pada home dari user .ssh's direktori. Yang akan memungkinkan untuk passwordless otentikasi (jika diterima sebagai auth metode pada ssh server's konfigurasi)

Komentar (3)

I've mulai menggunakan Kain untuk lebih canggih operasi. Kain ini membutuhkan Python dan beberapa dependensi lain, tetapi hanya pada mesin klien. Server hanya perlu ssh server. Saya menemukan alat ini akan jauh lebih kuat daripada shell script diserahkan ke SSH, dan layak kesulitan mendapatkan set up (terutama jika anda menikmati pemrograman Python). Kain menangani menjalankan script pada beberapa host (atau host dari peran tertentu), membantu memfasilitasi idempotent operasi (seperti menambahkan satu baris konfigurasi script, tapi tidak jika itu's sudah ada), dan memungkinkan pembangunan logika yang lebih kompleks (seperti Python dapat memberikan).

Komentar (0)

Coba jalankan ssh user@remote sh ./script.unx.

Komentar (2)

Dengan asumsi anda berarti anda ingin melakukan hal ini secara otomatis dari "lokal" mesin, tanpa manual login ke "remote" mesin, anda harus melihat ke TCL ekstensi dikenal sebagai Mengharapkan, hal ini dirancang tepat untuk situasi semacam ini. I've juga menyediakan link ke script untuk log-in/berinteraksi melalui SSH.

https://www.nist.gov/services-resources/software/expect

http://bash.cyberciti.biz/security/expect-ssh-login-script/

Komentar (0)

Saya menggunakan ini untuk menjalankan sebuah shell script pada mesin remote (diuji pada /bin/bash):

ssh deploy@host . /home/deploy/path/to/script.sh
Komentar (0)

jika anda ingin mengeksekusi perintah seperti ini temp=`ls -a` echo $temp perintah `` akan menyebabkan kesalahan.

perintah di bawah ini akan memecahkan masalah ini ssh user@host &#39;&#39;&#39; temp=`ls -a` echo $temp &#39;&#39;&#39;

Komentar (0)

Jawabannya di sini (https://stackoverflow.com/a/2732991/4752883) karya besar jika anda're berusaha untuk menjalankan script pada server linux menggunakan mesin plink atau ssh. Ini akan bekerja jika skrip telah beberapa baris pada linux.

Namun, jika anda mencoba untuk menjalankan batch script yang terletak pada daerah linux/windows mesin anda dan remote machine adalah Jendela, dan terdiri dari beberapa baris menggunakan

`plink root@MachineB -m local_script.bat`

tidak akan bekerja.

Hanya baris pertama dari script yang akan dijalankan. Ini mungkin batasan plink.

Solusi 1:

Untuk menjalankan sebuah multiline batch script (terutama jika itu's relatif sederhana, terdiri dari beberapa baris):

Jika anda asli script batch adalah sebagai berikut

cd C:\Users\ipython_user\Desktop 
python filename.py

anda dapat menggabungkan garis-garis bersama-sama menggunakan "&&" separator sebagai berikut dalam local_script.bat file: https://stackoverflow.com/a/8055390/4752883:

cd C:\Users\ipython_user\Desktop && python filename.py

Setelah perubahan ini, maka anda dapat menjalankan script seperti yang ditunjukkan di sini @JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883 dengan:

plink root@MachineB -m local_script.bat

Solusi 2:

Jika anda batch script yang relatif rumit, mungkin akan lebih baik untuk menggunakan batch naskah yang merangkum plink perintah sebagai berikut seperti yang ditunjukkan di sini by @Martin https://stackoverflow.com/a/32196999/4752883:

rem Open tunnel in the background
start plink.exe -ssh [username]@[hostname] -L 3307:127.0.0.1:3306 -i "[SSH
key]" -N

rem Wait a second to let Plink establish the tunnel 
timeout /t 1

rem Run the task using the tunnel
"C:\Program Files\R\R-3.2.1\bin\x64\R.exe" CMD BATCH qidash.R

rem Kill the tunnel
taskkill /im plink.exe
Komentar (0)

Anda dapat menggunakan runoverssh: bash sudo apt-get install runoverssh

bash runoverssh -s localscript.sh pengguna host1 host2 host3... -s berjalan naskah lokal jarak jauh

Berguna bendera: -g menggunakan global password untuk semua host (single password prompt) -n gunakan SSH alih-alih sshpass, yang berguna untuk umum-kunci otentikasi

Komentar (0)

Ini bash script melakukan ssh ke target remote mesin, dan menjalankan beberapa perintah pada mesin remote, jangan lupa untuk menginstal mengharapkan sebelum menjalankannya (pada mac brew install mengharapkan )

#!/usr/bin/expect
set username "enterusenamehere"
set password "enterpasswordhere"
set hosts "enteripaddressofhosthere"
spawn ssh  $username@$hosts
expect "$username@$hosts's password:"
send -- "$password\n"
expect "$"
send -- "somecommand on target remote machine here\n"
sleep 5
expect "$"
send -- "exit\n"
Komentar (1)
cat ./script.sh | ssh @
Komentar (0)
ssh user@hostname ".~/.bashrc;/cd path-to-file/;.filename.sh"

sangat dianjurkan untuk sumber lingkungan file(.bashrc/.bashprofile/.profil). sebelum menjalankan sesuatu di remote host karena target dan sumber host variabel lingkungan dapat deffer.

Komentar (0)

Pertama, copy script di atas ke Mesin B menggunakan scp

[user@mesin]$ scp /path/to/script user@machineB:/home/user/path

Kemudian, jalankan script

[user@mesin]$ ssh user@machineB "/home/user/path/script"

Ini akan bekerja jika anda telah diberikan eksekusi izin untuk script.

Komentar (6)