当前位置: 技术问答>linux和unix
shell远程服务器问题
来源: 互联网 发布时间:2016-12-28
本文导语: 现在遇到一个问题,机器A管理机器B,简单一点的话,比如,登录到B的root目录下,检查下有没有C这个文件,没有的话,建立一个C。 先建立ssh通道,再 ssh IP_B "if [ -f C ]; then ;else touch C;fi" 这样是可以的,如...
现在遇到一个问题,机器A管理机器B,简单一点的话,比如,登录到B的root目录下,检查下有没有C这个文件,没有的话,建立一个C。
先建立ssh通道,再 ssh IP_B "if [ -f C ]; then ;else touch C;fi"
这样是可以的,如果逻辑比较复杂的话,ssh IP_B command,还是这样吗?command 里面有变量的话,那该怎么弄的?
还有一种办法是用expect,这个逻辑判断,不知道该怎么弄,
希望大虾能指导下,或者给个思路吧,谢谢了
或者说一个机器管理多台机器,要有 删除远程机器的文件,查询等等功能,这个思路应该怎么写呢?
先建立ssh通道,再 ssh IP_B "if [ -f C ]; then ;else touch C;fi"
这样是可以的,如果逻辑比较复杂的话,ssh IP_B command,还是这样吗?command 里面有变量的话,那该怎么弄的?
还有一种办法是用expect,这个逻辑判断,不知道该怎么弄,
希望大虾能指导下,或者给个思路吧,谢谢了
或者说一个机器管理多台机器,要有 删除远程机器的文件,查询等等功能,这个思路应该怎么写呢?
|
批量管理多台服务器的一般思路是,有个跳板机,跳板机跟所有的服务器建立信任关系。写好一个在远端服务器上执行的脚本,scp 到远端,然后在远端执行。
给你个例子吧:
echo -e "make dir /opt/mdn_tool_wtg/shellscript..."|tee -a $check_log
timeout 10 ssh $addr "mkdir -p /opt/mdn_tool_wtg/shellscript"||echo "make dir fail !"| tee -a $check_log
echo -e "copy file $1..." |tee -a $check_log
timeout 10 scp shellscript/$1 $addr:/opt/mdn_tool_wtg/shellscript || echo "copy file fail !"| tee -a $check_log
echo -e "execute script $1..." |tee -a $check_log
timeout 30 ssh $addr "cd /opt/mdn_tool_wtg/shellscript ; sh $1 " ||echo "execute script fail !"| tee -a $check_log
给你个例子吧:
echo -e "make dir /opt/mdn_tool_wtg/shellscript..."|tee -a $check_log
timeout 10 ssh $addr "mkdir -p /opt/mdn_tool_wtg/shellscript"||echo "make dir fail !"| tee -a $check_log
echo -e "copy file $1..." |tee -a $check_log
timeout 10 scp shellscript/$1 $addr:/opt/mdn_tool_wtg/shellscript || echo "copy file fail !"| tee -a $check_log
echo -e "execute script $1..." |tee -a $check_log
timeout 30 ssh $addr "cd /opt/mdn_tool_wtg/shellscript ; sh $1 " ||echo "execute script fail !"| tee -a $check_log
|
做好key信任的话就很简单了,不复杂,在本地怎么写的脚本,在远程也一样,只是要注意一下变量的问题,举个简单的例子:
删除每台机器的指定文件/tmp/file.txt 和 /root/trash.txt
#!/bin/bash
iplist='192.168.1.1
192.168.1.2
...
'
filename=/tmp/file.txt
for ip in $iplist;do
ssh $ip "
filename=/root/trash.txt
echo " $filename $filename "
if [ -f $filename ];then
rm -f $filename
elif [ -f $filename ] ;then
rm -f $filename
fi
"
done
exit 0
就这样,注意两个filename变量使用方式的不同
删除每台机器的指定文件/tmp/file.txt 和 /root/trash.txt
#!/bin/bash
iplist='192.168.1.1
192.168.1.2
...
'
filename=/tmp/file.txt
for ip in $iplist;do
ssh $ip "
filename=/root/trash.txt
echo " $filename $filename "
if [ -f $filename ];then
rm -f $filename
elif [ -f $filename ] ;then
rm -f $filename
fi
"
done
exit 0
就这样,注意两个filename变量使用方式的不同