Я хотел бы иметь сценарий (bash) для переименования файла на нескольких удаленных серверах Linux. Есть идеи, как это сделать? Спасибо.
Для этого вы можете использовать ssh. Например:
for server in server1 server2 server3; do ssh $server mv oldfilename newfilename; done
Вы можете захотеть сохранить список серверов в переменной среды:
export MYLISTOFSERVERS="server1
server2
server3
...
servern
"
и функция (например) в вашем bashrc (или специальный скрипт):
runforeachserver () {
for server in $MYLISTOFSERVERS; do
ssh $server "$@"
done
}
поэтому вы можете вызывать его, когда хотите выполнять задачи для каждого из ваших серверов. Например, переименуйте файлы как хотите:
runforeachserver mv oldfilename newfilename
или (просто чтобы показать вам, как убрать команду для прохождения через ssh):
runforeachserver date -d \"month ago\" +\"%Y-%m-%d\"
2011-04-04
2011-04-04
2011-04-04
2011-04-04
2011-04-04
2011-04-04
Очевидно, это может быть настолько надежно, насколько вы хотите (включение массивов servername / sshport), проверки синтаксиса и т. Д.
Вы можете использовать однострочный Perl:
perl -lne 'system("/usr/bin/ssh -l username $_ command")' computers
где компьютеры файл с одним IP-адресом в каждой строке, а команда - это команда, которую вы хотите запустить. (измените путь к вашему двоичному файлу ssh по мере необходимости, из соображений безопасности используйте абсолютный путь)
Вам также следует настроить SSH-ключи. Вы можете использовать ssh-copy-id для этого, поэтому вам не нужно будет вводить пароль каждый раз при запуске скрипта для каждого сервера.
ssh-keygen
ssh-copy-id username@hostname
Хотя это не сценарий bash, вы также можете попробовать ClusterSSH. Это поможет вам выполнять одну и ту же команду на нескольких серверах одновременно.