通过sshpass非交互式巡检linux主机

用法示例

1、该脚本适用场景
    ssh远程信息相同的多台linux服务器

2、运行环境需要先安装sshpass
    apt install sshpass -y
    yum install sshpass -y

3、用法
    脚本路径 "指令1;指令2"

4、效果演示
root@gateway-ddns-60:~# ./test.sh "date;curl -sf myip.ipip.net"

root@gateway-ddns-60:~# ./test.sh "date;w"
####分割线#### hk.wsfnk.cf is up
ser552965470679
Sun May 14 17:04:17 CST 2023
 17:04:17 up 24 days, 14:29,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
####分割线#### ttk.wsfnk.cf is up
ttk-vps
Sun May 14 12:05:10 MSK 2023
 12:05:10 up 144 days,  7:38,  0 users,  load average: 0.00, 0.00, 0.00
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
####分割线#### 123.123.123.123 is down

脚本内容

#!/bin/bash
#set -x

# 必须以root身份执行
if [ "$UID" -ne "0" ]
then
  echo "Must be root to run this script."
  exit 1
fi

# 输入参数数量正确性判断
if [ "$#" -gt "1" ];then
  echo "脚本已退出,原因:输入参数过多,仅允许输入一个参数"
  exit 1
elif [ "$#" -eq "0" ];then
  echo "脚本已退出,原因:未输入任何参数"
  exit 1
fi

# 定义帮助信息函数
print_help() {
    echo -e "用法1: $0 \"shell_commond1\""
    echo -e "用法2: $0 \"shell_commond1;shell_commond2\""
    echo "选项:"
    echo "  -h, --help     显示帮助信息"
    echo "  -v, --version  显示版本信息"
    echo "特别注意: 仅允许一个输入参数,多个shell命令,请用双引号括起来,中间用分号隔开,脚本会按顺序执行"
}

# 定义主机列表
hosts=(
"ip_address01"
"ip_address02"
"ip_address03"
)
# 定义ssh相关信息,并接受$1参数作为脚本执行的command
username="root"
password="123456"
sshport="22"
command="$1"

# 定义实际工作函数
runing_work() {
for host in "${hosts[@]}"
  do
    # 判断主机是否up,并执行信息获取
    if ping -c 1 -w 1 "$host" >/dev/null 2>&1; then
      echo -e "####分割线#### $host is up"
      # 在这里添加需要执行的命令
      sshpass -p "$password" ssh -o StrictHostKeyChecking=no "$username"@"$host" -p "$sshport" "hostname; $command"
    else
      echo -e "####分割线#### $host is down"
    fi
  done
}

# 处理命令行参数
while [[ $# -gt 0 ]]; do
    key="$1"
    case $key in
        -h|--help)
            print_help
            exit 0
            ;;
        -v|--version)
            echo "版本 1.0"
            exit 0
            ;;
        *)
            runing_work
            exit 0
            ;;
    esac

    shift
done
声明:本文为原创,作者为 辣条①号,转载时请保留本声明及附带文章链接:https://boke.wsfnk.com/archives/1140.html
谢谢你请我吃辣条谢谢你请我吃辣条

如果文章对你有帮助,欢迎点击上方按钮打赏作者

最后编辑于:2023/5/15作者: 辣条①号

现在在做什么? 接下来打算做什么? 你的目标什么? 期限还有多少? 进度如何? 不负遇见,不谈亏欠!

暂无评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

arrow grin ! ? cool roll eek evil razz mrgreen smile oops lol mad twisted wink idea cry shock neutral sad ???

文章目录