原文地址:开源【gosible】轻量级的 ssh 批量操作工具
项目背景
在日常运维工作中,经常遇到上传下载文件,批量主机命令巡检和执行脚本这些操作,
日常工具如ansible,或者其他终端工具太过庞大,且在复杂的环境中难以通用,故写了这个工具,需要满足如下场景使用:
1、批量文件下发,批量命令执行。
2、跨平台,无依赖执行。
3、轻量且稳定。
4、高并发。
项目概述
这个工具是一个命令行应用,使用 urfave/cli 库来处理命令行参数和选项。它的主要功能包括:
读取主机信息:从指定的文件中读取主机信息,文件格式为每行一个主机,包括主机 IP 地址、端口、用户名和密码。
并发执行:支持并发执行任务,以加快巡检和文件复制的速度。你可以设置最大并发数来控制并发执行的任务数量,默认为5。
文件复制:支持将本地文件复制到远程主机,使用 SFTP(SSH File Transfer Protocol)协议来实现。
远程命令执行:可以在远程主机上执行指定的命令或脚本。
项目地址
github地址: GitHub - llody55/gosible: 使用 Golang 语言编写的基于 SSH 协议的工具,旨在执行远程主机文件分发和命令执行功能。
gitee地址: gosible: 使用 Golang 语言编写的基于 SSH 协议的工具,旨在执行远程主机文件分发和命令执行功能。
使用指南
下载二进制文件
wget https://github.com/llody55/gosible/releases/download/v1/gosible-amd64 && chmod +x gosible-amd64 && mv gosible-amd64 /usr/local/bin/gosible
使用示例
-hosts
:指定主机信息文件的路径。
-run
:指定要在主机上执行的命令或脚本。
-copy
:指定要复制的文件的本地路径和远程路径。
创建hosts.txt文件
[root@llody-dev ~/go-build]#cat hosts.txt
192.168.1.232:22:root:admin
192.168.1.220:22:root:admin
文件下发 -- copy
文件下发主要是从当前主机把指定文件或者目录批量拷贝道远程主机
[root@llody-dev ~/go-build]#go run ops.go --hosts ./hosts.txt --copy "/root/go-build/go.mod:/opt/go.mod"
[192.168.1.220] 正在执行任务...
Copying file /root/go-build/go.mod to host: 192.168.1.220:/opt/go.mod
[192.168.1.232] 正在执行任务...
Copying file /root/go-build/go.mod to host: 192.168.1.232:/opt/go.mod
File /root/go-build/go.mod copied to 192.168.1.220:/opt/go.mod
[192.168.1.220] 任务完成
File /root/go-build/go.mod copied to 192.168.1.232:/opt/go.mod
[192.168.1.232] 任务完成
命令运行 -- run
主要用于运行命令或者执行脚本程序
[root@llody-dev ~/go-build]#go run ops.go --hosts ./hosts.txt --run "ls -lah /opt/ | grep go"
[192.168.1.220] 正在执行任务...
Checking host: 192.168.1.220
[192.168.1.232] 正在执行任务...
Checking host: 192.168.1.232
Result from 192.168.1.220:
-rw-r--r-- 1 root root 401 Oct 30 13:40 go.mod
[192.168.1.220] 任务完成
Result from 192.168.1.232:
-rw-r--r-- 1 root root 401 10月 30 13:40 go.mod
[192.168.1.232] 任务完成
[root@llody-dev ~/go-build]#go run ops.go --hosts ./hosts.txt --run "rm -rf /opt/go.mod"
[192.168.1.220] 正在执行任务...
Checking host: 192.168.1.220
[192.168.1.232] 正在执行任务...
Checking host: 192.168.1.232
Result from 192.168.1.220:
[192.168.1.220] 任务完成
Result from 192.168.1.232:
[192.168.1.232] 任务完成
[root@llody-dev ~/go-build]#go run ops.go --hosts ./hosts.txt --run "sh demo.sh"
[192.168.1.220] 正在执行任务...
Checking host: 192.168.1.220
[192.168.1.232] 正在执行任务...
Checking host: 192.168.1.232
Result from 192.168.1.220:
┏┓ ┏┓
┏┛┻━━━━━━┛┻┓
┃ ☃ ┃
┃ ┳┛ ┗┳ ┃
┃ ┻ ┃
┗━┓ ┏━┛
┃ ┗━━━━━┓
┃ 神兽保佑 ┣┓
┃ 永无BUG! ┏┛
┗┓┓┏━┳┓┏━━━━━┛
┃┫┫ ┃┫┫
┗┻┛ ┗┻┛
[192.168.1.220] 任务完成
Result from 192.168.1.232:
┏┓ ┏┓
┏┛┻━━━━━━┛┻┓
┃ ☃ ┃
┃ ┳┛ ┗┳ ┃
┃ ┻ ┃
┗━┓ ┏━┛
┃ ┗━━━━━┓
┃ 神兽保佑 ┣┓
┃ 永无BUG! ┏┛
┗┓┓┏━┳┓┏━━━━━┛
┃┫┫ ┃┫┫
┗┻┛ ┗┻┛
[192.168.1.232] 任务完成
总结
SSH 工具是一个用 Go 语言编写的实用工具,旨在简化批量巡检和文件复制任务。通过并发执行任务和支持 SFTP 协议,它可以帮助你更轻松地管理多个远程主机。你可以在实际工作中将其应用于系统管理、部署和维护工作。
如果遇到问题欢迎留言或者提交issues。