SHH部署脚本

两篇文章简单记录一下这周使用过的几个脚本。首先是shell脚本实现ssh自动输入密码登录主机,并在主机部署脚本并执行。
待执行脚本send_data.sh实现从配置文件server.conf读服务器地址,并向地址某端口连续发送数据。
server.conf文件信息格式:

server_address: xxx@127.0.0.1
server_port: 80

发送信息脚本

send_data.sh脚本首先从配置文件读取目标addr和port,根据传入的参数第一个web/ssh来选择目标端口,根据第二个参数选择发送次数:

#read config
CK_PATH=$(cd `dirname "$0"`; pwd)
BIN_PATH=$PACK_PATH

server_addr=$(cat $BIN_PATH/server.conf | grep server_address | awk '{print $2}')
server_port=$(cat $BIN_PATH/server.conf | grep server_port | awk '{print $2}')
master_host=${master_addr:4}


if [ "$1" == "web" ];then
    i=0
    while [[ $i -lt $2 ]]
    do
        echo "send test to $server_host port $server_port"
        echo "test" | nc $master_host  $server_port
        let "i+=1"
    done
elif [ "$1" == "ssh" ];then
    i=0
    while [[ $i -lt $2 ]]
    do
        echo "send test to $server_host port 22"
        echo "test" | nc $server_host  22
        let "i+=1"
    done
fi

echo "send data over to $server_host"

脚本部署:

脚本部署实现从配置文件ssh.conf中得到希望部署到的主机地址和密码,然后将脚本scp到目标主机,并在该主机执行脚本send_data.sh。
ssh.conf文件格式:

xxx@hostname1 passwd1
xxx@hostname2 passwd2

部署脚本deploy.sh:

PACK_PATH=$(cd `dirname "$0"`; pwd)

while read line; do
    host=$(echo $line | awk '{print $1}' )
    passwd=$(echo $line | awk '{print $2}')
    #scp senddata.py to remote host
    #expect ./exp/ssh.exp  $host $passwd  "rm -r ~/tmp"
    expect ./exp/scp.exp  $host $passwd $PACK_PATH
    expect ./exp/ssh.exp  $host $passwd  "sh ~/bbs1.2/senddata.sh web 2000000000"
done < ssh.conf
echo "end deploy and run"

ssh自动输入密码

由于希望实现密码自动输入,这里使用expect(可能需要安装),将scp功能和执行命令功能放在不同的两个文件:

/exp/scp.exp:

#!/usr/bin/expect

#set commend [lindex $argv 0]
set remote_path [lindex $argv 0]
set loacl_dir [lindex $argv 2]
set passwd [lindex $argv 1]

spawn scp -r $loacl_dir $remote_path:~
expect "*assword:*"
send "$passwd\r"
expect eof

/exp/ssh.exp:

#!/usr/bin/expect

set remote_path [lindex $argv 0]
set commend [lindex $argv 2]
set passwd [lindex $argv 1]

spawn ssh $remote_path $commend
expect "*assword:*"
send "$passwd\r"
expect eof

测试脚本:

运行命令

sh deploy.sh

实现向server主机的80端口发送2000000000次“test”。代码很多参数也可从命令行读取。

原创文章,原文到我的博客
更多关注公众号:

wechat

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,064评论 19 139
  • 本文章仅作为个人笔记 CDH官网地址:https://www.cloudera.com/ CDH镜像地址: c...
    草丛里的黄盖阅读 6,281评论 2 2
  • linux资料总章2.1 1.0写的不好抱歉 但是2.0已经改了很多 但是错误还是无法避免 以后资料会慢慢更新 大...
    数据革命阅读 14,334评论 2 33
  • 一大早,儿子突然哭起来,不让说不让碰,后来才发现尿床了,两周不到的小孩自尊心就那么强 每次拉大便也是这样,一开始拉...
    沐妮阅读 1,369评论 0 0
  • 当我还是一名小学生的时候,就梦想着有一天能够自己赚钱,可以买好多好吃的,好玩的,漂亮的衣服等等。当我上了初中,就梦...
    佳子萋萋阅读 1,891评论 1 3

友情链接更多精彩内容