тихий 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