nit*_*thi 4 server ssh command-line bash scripts
我的测试环境中有 6 台服务器。我想编写一个脚本,通过登录一个盒子而不是每个盒子来停止所有盒子中的 Tomcat 服务器。
请帮助我编写 shell 脚本、SSH 并在所有其他框中执行脚本。我使用带有密码和自定义端口号的 SSH。
您应该将两个相关的 Ask Ubuntu 答案合并到一个脚本中,一个用于通过特定端口登录SSH,另一个用于在远程服务器上运行命令。当然,您需要有某种形式的数据结构来保存服务器+端口的对应关系。这可以是 bash关联数组,也可以是POSIX shell 脚本——一个 case 语句。假设您在所有主机上的用户名都相同,我们可以想出这样的事情:
#!/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
Run Code Online (Sandbox Code Playgroud)
现在,一个巨大的免责声明:这只是一个例子。我没有 6 台服务器来测试脚本,因此请根据需要对其进行调整。如果每个主机上的用户名不同,请使用其他case语句
关于登录的旁注:如果您有所有 6 个服务器都接受的私钥,只需添加-i ~/.ssh/id_rsa. 替代方法是~/.ssh/config为每个主机创建一个包含密钥/密码信息的文件。这在Lekensteyn 的回答中有所描述。如果您不熟悉 SSH 密钥(我知道这是一个令人困惑的话题),您可能想阅读ssh.com 上有关该主题的文章。
| 归档时间: |
|
| 查看次数: |
14002 次 |
| 最近记录: |