在做分布式时,使用ssh
控制集群节点,如果需要关机重启或者批量处理等行为时需要依次登陆进去然后执行命令,有时还要输入密码。集群少的时候还好,等节点多了的话几乎就是场灾难啊。身为程序员怎么可能使自己做这种重复性的工作呢,所以需要一个脚本来一键执行。
ssh执行远程命令
首先说明通过ssh
来执行远程命令:1
ssh $remote_username@$remote_ip exec "$commend"
其中$remote_username
为远程用户,$remote_ip
为远程主机ip地址,$commend
需要在远程主机上执行的命令。
如果时多条commend
需要用;
隔开。
免密码执行sudo命令
接下来说明如何面密码执行sudo
命令。其实并不是免密码,而且很不安全,但是在自己内部的集群上是不需要考虑这些了。1
echo "$pwd" | sudo -S $commend
里面的$pwd
为密码,$commend
为需要sudo
权限执行的命令。其实就是通过管道|
将密码定向输入进去。
结合
所以结合起来就是下面的样子:1
ssh $remote_username@$remote_ip exec "echo \"$pwd\" | sudo -S $commend"
举个例子,这是我通过ssh
关闭8个slave
节点的脚本:1
#!/bin/bash
i=1
while(( $i<=8 ))
do
target="slave$i"
printf "Will to shutdown the\e[31m ${target}\e[0m !!\n"
ssh $target exec "echo \"hadoop\" | sudo -S halt"
let "i++"
done