Как использовать SSH для запуска сценария оболочки на удаленной машине? - PullRequest
1121 голосов
/ 20 ноября 2008

Мне нужно запустить скрипт оболочки (windows / Linux) на удаленной машине.

У меня настроен SSH как на машине A, так и на B. Мой сценарий находится на машине A, которая будет выполнять часть моего кода на удаленной машине, машине B.

Локальный и удаленный компьютеры могут быть системами на базе Windows или Unix.

Есть ли способ запустить это, используя plink / ssh?

Ответы [ 13 ]

1 голос
/ 21 апреля 2018

Ответ здесь (https://stackoverflow.com/a/2732991/4752883) отлично работает, если Вы пытаетесь запустить скрипт на удаленной машине Linux, используя plink или ssh. Это будет работать, если скрипт имеет несколько строк на linux.

** Однако, если вы пытаетесь запустить пакетный скрипт, расположенный на локальном linux/windows машина и ваш удаленный компьютер Windows, и он состоит из нескольких строк, используя **

plink root@MachineB -m local_script.bat

не будет работать.

Будет выполнена только первая строка скрипта. Это, вероятно, ограничение plink.

Решение 1:

Для запуска многострочного пакетного сценария (особенно если он относительно простой, состоящий из нескольких строк):

Если ваш оригинальный пакетный скрипт выглядит следующим образом

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

Вы можете объединить строки, используя разделитель "&&", как показано в local_script.bat файл: https://stackoverflow.com/a/8055390/4752883:

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

После этого изменения вы можете запустить скрипт, как указано здесь: @ JasonR.Coombs: https://stackoverflow.com/a/2732991/4752883 с:

`plink root@MachineB -m local_script.bat`

Решение 2:

Если ваш пакетный скрипт относительно сложен, возможно, лучше использовать пакетный скрипт скрипт, который инкапсулирует команду plink, а также следует, как указано здесь @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
0 голосов
/ 30 мая 2018

Этот bash-скрипт запускает ssh на целевой удаленной машине и запускает некоторую команду на удаленной машине, не забудьте установить ожидаемую часть перед запуском (на mac brew install expect)

#!/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"
0 голосов
/ 20 ноября 2008

Сначала скопируйте скрипт на компьютер B, используя scp

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

Затем просто запустите скрипт

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

Это будет работать, если вы дали исполняемому файлу разрешение на выполнение скрипта.

...