У меня есть 6 серверов в моей тестовой среде. Я хочу записать сценарий для остановки сервера Tomcat во всех полях путем вхождения в одно поле вместо того, чтобы войти в каждое поле.
Помогите мне со сценариями оболочки, SSH и выполнением сценария во всех других полях. Я использую SSH с паролем и пользовательским номером порта.
Необходимо объединиться, два связанных Спрашивают ответы Ubuntu, один для того, чтобы войти в SSH через определенный порт и один для выполнения команд на удаленном сервере, в один сценарий. Конечно, у Вас должна была бы быть некоторая форма структуры данных для содержания server+port корреспонденции. Это могло быть или ассоциативными массивами удара или со сценарием оболочки POSIX - оператор выбора. Принятие Вашего имени пользователя на всех хостах является тем же, мы могли придумать что-то вроде этого:
#!/bin/sh
# bar host has ssh server on port 22, while baz - on port 2222
host_port(){
case "$1" in
"bar") echo 22 ;;
"baz") echo 2222 ;;
esac
}
# set positional parameters of script to hosts and iterate over them
set -- bar baz
for host ; do
# command substitution will call function,
# function's return value will be the port number
ssh ssh://username@"$host":"$(host_port "$host")" -t "systemctl stop tomcat"
done
Теперь, гигантская правовая оговорка: Это - просто пример. Я не имею 6 серверов для тестирования сценария, поэтому адаптирую его к потребностям по мере необходимости. Если у Вас есть различные имена пользователей на каждом хосте, используйте другого case
оператор
Примечание стороны по входу в систему: если у Вас будет закрытый ключ, который принят всеми 6 серверами, то будет легко войти в систему только путем добавления -i ~/.ssh/id_rsa
. Альтернатива этому должна была бы создать a ~/.ssh/config
файл с ключом/информацией о пароле для каждого хоста. Это описано в ответе Lekensteyn. Если Вы не знакомы с ключами SSH (и я понимаю, что это - вид запутывающей темы), Вы могли бы хотеть прочитать статью ssh.com о теме.
Можно использовать sshpass:
sudo apt install sshpass -y
затем можно выполнить команду на удаленном сервере, например
#!/bin/bash
# login info
HOST='192.168.0.1'
USER='user'
PORT='2222'
PASSWORD='password'
# command
sshpass -p $PASSWORD ssh -p $PORT $USER@$HOST touch 1.txt