Pengguna anonim
Lebih
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?
1160
16
Jika Mesin A adalah Jendela kotak, anda dapat menggunakan Plink (bagian dari Dempul) dengan parameter-m, dan akan mengeksekusi script lokal pada remote server.
Jika Mesin A adalah sistem berbasis Unix, anda dapat menggunakan:
Seharusnya kau't harus copy script ke remote server untuk menjalankannya.
Ini adalah pertanyaan lama, dan Jason's jawaban yang bekerja dengan baik, tapi saya ingin menambahkan ini:
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:
mencetak /home/user2
sementara
mencetak /home/user
Contoh lain:
mencetak "hello" benar.
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:
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)
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).
Coba jalankan
ssh user@remote sh ./script.unx
.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/
Saya menggunakan ini untuk menjalankan sebuah shell script pada mesin remote (diuji pada /bin/bash):
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 ''' temp=`ls -a` echo $temp '''
Jawabannya di sini (https://stackoverflow.com/a/2732991/4752883) karya besar jika anda're berusaha untuk menjalankan script pada server linux menggunakan mesin
plink
ataussh
. Ini akan bekerja jika skrip telah beberapa baris padalinux
.Namun, jika anda mencoba untuk menjalankan batch script yang terletak pada daerah
linux/windows
mesin anda dan remote machine adalahJendela
, dan terdiri dari beberapa baris menggunakantidak 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
anda dapat menggabungkan garis-garis bersama-sama menggunakan "&&" separator sebagai berikut dalam
local_script.bat
file: https://stackoverflow.com/a/8055390/4752883: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:
Anda dapat menggunakan runoverssh:
bash sudo apt-get install runoverssh
bash runoverssh -s localscript.sh pengguna host1 host2 host3...
-s
berjalan naskah lokal jarak jauhBerguna bendera:
-g
menggunakan global password untuk semua host (single password prompt)-n
gunakan SSH alih-alih sshpass, yang berguna untuk umum-kunci otentikasiIni 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
)sangat dianjurkan untuk sumber lingkungan file(.bashrc/.bashprofile/.profil). sebelum menjalankan sesuatu di remote host karena target dan sumber host variabel lingkungan dapat deffer.
Pertama, copy script di atas ke Mesin B menggunakan scp
Kemudian, jalankan script
Ini akan bekerja jika anda telah diberikan eksekusi izin untuk script.