# SSHCommander **Repository Path**: cntaige/sshcommander ## Basic Information - **Project Name**: SSHCommander - **Description**: 这个 SSH 命令执行工具可以帮助您连接到远程 Linux 服务器并执行命令,支持批量执行和 su 权限提升。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-04-20 - **Last Updated**: 2025-04-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SSH 命令执行工具使用文档 这个 SSH 命令执行工具可以帮助您连接到远程 Linux 服务器并执行命令,支持批量执行和 su 权限提升。以下是详细的使用说明。 ## 功能特点 - 支持单主机或多主机批量执行命令 - 支持通过配置文件或命令行参数指定连接信息 - 支持 su 权限提升执行命令 - 支持公共参数配置,减少重复配置 - 自动记录执行日志,包含详细的执行结果 - 支持跨平台编译,可在Windows、Linux、macOS等系统上运行 - 支持自动加载目录下的所有YAML配置文件 ## 编译说明 本工具使用Go语言开发,可以编译成多种平台的可执行文件。 ### 环境准备 1. 安装Go语言环境(版本1.20或以上):https://golang.org/dl/ 2. 确保已安装必要的依赖包: ```bash go mod tidy ``` ### 编译windows平台 在项目目录下执行以下命令,编译适用于当前系统的可执行文件: ```bash go build -o sshcommander.exe ``` ## 命令行参数 | 参数 | 说明 | 默认值 | |------|------|--------| | `-host` | SSH 主机地址 | 无 | | `-port` | SSH 端口号 | 22 | | `-user` | SSH 用户名 | 无 | | `-password` | SSH 密码 | 无 | | `-cmd` | 要执行的命令 | 无 | | `-timeout` | 连接超时时间(秒) | 10 | | `-su` | 是否使用 su 切换用户 | false | | `-supass` | su 命令的密码 | 无 | | `-c` | 配置文件路径或目录路径 | 无 | | `-log` | 日志文件路径 | ssh_execution.log | | `-default`| 生成默认配置文件模板| false| ## 使用方式 ### 1. 命令行模式 直接通过命令行参数指定单个主机的连接信息和要执行的命令: ```bash sshcommander.exe -host 192.168.1.100 -port 22 -user admin -password admin123 -cmd "df -h" 使用 su 提升权限: ```bash sshcommander.exe -host 192.168.1.100 -user admin -password admin123 -su -supass root123 -cmd "fdisk -l" ``` ### 2. 配置文件模式 通过 YAML 配置文件指定多个主机和命令: ```bash sshcommander.exe -c config.yml ``` 配置文件示例: ```yaml # 全局超时设置 timeout: 15 # 公共参数配置 common: port: 22 user: default_user password: default_pass su: true supass: "root_password" commands: - "df -h" - "free -m" # 主机组配置 hosts: - host: 192.168.1.100 port: 22 # 覆盖公共参数 user: user1 password: pass1 commands: - "ls -la /home/user1" - host: 192.168.1.101 # 没有指定port,将使用common.port user: user2 password: pass2 # 没有指定commands,将使用common.commands - host: 192.168.1.102 # 这个主机将使用所有公共参数,只需指定主机地址 ``` ### 3. 混合模式 可以同时使用配置文件和命令行参数,命令行参数会覆盖配置文件中的设置: ```bash sshcommander.exe -c config.yml -timeout 30 -log custom_log.log ``` ## 配置文件说明 配置文件使用 YAML 格式,包含以下几个部分: 1. timeout : 全局超时设置,单位为秒 2. common : 公共参数配置,适用于所有主机 - port: SSH 端口 - user: SSH 用户名 - password: SSH 密码 - su: 是否使用 su 切换用户 - supass: su 命令的密码 - commands: 要执行的命令列表 3. hosts : 主机配置列表,每个主机可以覆盖公共参数 - host: 主机地址(必填) - port: SSH 端口(可选) - user: SSH 用户名(可选) - password: SSH 密码(可选) - su: 是否使用 su 切换用户(可选) - supass: su 命令的密码(可选) - commands: 要执行的命令列表(可选) ## 日志输出 程序会将执行结果同时输出到控制台和日志文件中。日志文件默认为当前目录下的 ssh_execution.log ,可以通过 -log 参数指定自定义路径。 日志格式示例: ```plaintext === 执行开始于 2023-05-20 15:30:45 === [192.168.1.100] 正在连接到 192.168.1.100:22... [192.168.1.100] 执行命令: df -h [192.168.1.100] 命令执行成功,输出: Filesystem Size Used Avail Use% Mounted on /dev/sda1 20G 5.0G 15G 25% / ... === 执行结束于 2023-05-20 15:30:50 === ``` ## 注意事项 1. 使用 su 切换用户时,必须提供 su 密码 2. 配置文件中的主机配置优先于公共配置 3. 命令行参数优先于配置文件中的设置 4. 如果主机没有指定命令,将使用公共命令 5. 密码在配置文件中以明文存储,请确保配置文件的安全性 ## 示例场景 ### 场景一:检查多台服务器的磁盘使用情况 ```yaml timeout: 10 common: port: 22 user: monitor password: monitor123 commands: - "df -h" - "du -sh /var/log" hosts: - host: 192.168.1.100 - host: 192.168.1.101 - host: 192.168.1.102 ``` ### 场景二:以 root 权限执行系统维护命令 ```yaml timeout: 30 common: port: 22 user: admin password: admin123 su: true supass: "root_password" commands: - "fdisk -l" - "systemctl status nginx" - "tail -n 100 /var/log/syslog" hosts: - host: 192.168.1.100 - host: 192.168.1.101 ``` ### 场景三:针对不同服务器执行不同命令 ```yaml timeout: 15 common: port: 22 user: admin password: admin123 hosts: - host: 192.168.1.100 # Web 服务器 commands: - "systemctl status nginx" - "tail -n 50 /var/log/nginx/error.log" - host: 192.168.1.101 # 数据库服务器 commands: - "systemctl status mysql" - "mysql -e 'SHOW PROCESSLIST'" su: true supass: "db_root_pass" ```