Назад | Перейти на главную страницу

Запустить локальный скрипт через ssh

тихий ssh ​​настраивается с сервера A на сервер B (и еще около 500 других серверов)
Я написал сценарий на сервере A (оболочка и perl), который я хочу выполнить через ssh на сервере B (и других 500 серверах). Это возможно ? Я могу запускать команды, используя тихий ssh, но не знаю, как запускать целые скрипты.

Если Сервер A - это система на базе Unix / Linux, вы можете использовать:

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

Вам не нужно копировать сценарий на удаленный сервер, чтобы запустить его.

Используйте эту команду:

ssh user@host <<'my.sh'
#script to run on remote host
my.sh

Поскольку тихий ssh ​​уже настроен, он уже настроен, как вы говорите, я бы скопировал файл и выполнил его локально

то есть:

while read line
do
  echo Trying to configure server [IP]: $line >> error.log
  scp my-script.sh $line:/root/scripts/ &>> error.log
  ssh root@$line 'cd /root/scripts && ./my-script.sh' &> error.log
  echo Finished working with [IP]: $line >> error.log
done <client-ips.txt

Запуск сценария на клиентском сайте менее подвержен ошибкам, чем его анализ с помощью операторов <<<.

Что-то похожее на приведенный выше сценарий должно сделать за вас большую часть работы (надеюсь, всю). Кроме того, он будет отслеживать все (&> пересылать сообщения об ошибках), что пошло не так, чтобы вы знали, какие IP-адреса вам нужно отслеживать вручную.

#!/bin/bash
# Source : http://backreference.org/2011/08/10/running-local-script-remotely-with-arguments/
# runremote.sh
# usage: runremote.sh localscript interpreter remoteuser remotehost arg1 arg2 ...
# example: runremote.sh MySQL_makeUser.sh bash pi coins.ml database user

realscript=$1
interpreter=$2
user=$3
host=$4
shift 4

declare -a args

count=0
for arg in "$@"; do
  args[count]=$(printf '%q' "$arg")
  count=$((count+1))
done

ssh $user@$host "cat | ${interpreter} /dev/stdin" "${args[@]}" < "$realscript"
# Note: you may need to add options or hardcode keys and such into the above command; example of this commented bellow
# ssh -i <path/to/key> -p <port> $user@$host "cat | ${interpreter} /dev/stdin" "${args[@]}" < "$realscript"

Выше приведен сценарий, который я нашел после небольшого поиска и немного изменил, чтобы показать пример использования и пример использования ключей для соединений, поскольку OP заявил, что он будет запускаться на многих других серверах. Этот сценарий также закодирован таким образом, что вы можете передавать аргументы локальному сценарию и указывать программу, которую сервер должен использовать для получения команд сценария; то есть вы можете указать своему серверу использовать perl, python или java ... и затем дать ему соответствующий сценарий :-D Источник, который я нашел, приведенный выше сценарий жестко закодирован в его комментариях, так что копирование / прошлое все равно позволит вам спустя годы найти оригинальных авторов ;-)

Удачи всем вам.

Вы можете выполнять удаленные команды через ssh, например

ssh user@serverA /path/to/your/script