linux下面密码执行sudo命令

在做分布式时,使用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