# sshpsgo **Repository Path**: graviton/sshpsgo ## Basic Information - **Project Name**: sshpsgo - **Description**: sshpass in golang - **Primary Language**: Unknown - **License**: AGPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-18 - **Last Updated**: 2026-06-18 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # sshpsgo 用 Go 实现 `sshpass-1.10` 的核心行为. 这个命令会为子进程创建一个伪终端, 监听该终端里的 SSH 密码提示, 并在匹配到提示后写入一次配置好的密码. Unix 上使用传统 PTY 和控制终端; Windows 上使用 ConPTY 运行 OpenSSH, 并在密码发送后进入交互输入输出转发. ## 构建 ```sh ./build.sh ``` 也可以直接使用 Go 构建: ```sh go build -o build/sshpass ./cmd/sshpass ``` Windows: ```powershell go build -o build\sshpass.exe .\cmd\sshpass ``` ## 用法 ```text sshpass [-f|-d|-p|-e[env_var]] [-hV] command parameters ``` 支持的密码来源: - `-p password`: 通过命令行参数提供密码. - `-f filename`: 使用文件第一行作为密码. - `-d number`: 从继承的文件描述符读取密码. - `-e[env_var]`: 从环境变量读取密码; 不指定变量名时默认使用 `SSHPASS`. - 不指定密码来源选项时: 从 stdin 读取密码. 其他支持的选项: - `-P prompt`: 覆盖默认密码提示匹配字符串. - `-v`: 向 stderr 输出调试信息. - `-h`: 显示帮助. - `-V`: 显示版本信息. 密码来源选项最多只能指定一个. 默认密码提示匹配逻辑遵循 `sshpass-1.10` 源码行为, 搜索字符串为 `assword`. ## 示例 使用密码 `114514` 连接 `10.0.255.5:13031`, 并在远端执行 `echo SSH_OK`: ```sh ./build/sshpass -p 114514 ssh -p 13031 -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null -o PreferredAuthentications=password -o PubkeyAuthentication=no 10.0.255.5 'echo SSH_OK' ``` Windows: ```powershell .\build\sshpass.exe -p 114514 ssh -p11061 -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -o PreferredAuthentications=password -o PubkeyAuthentication=no app@10.0.255.12 echo SSH_OK ``` Windows 交互 shell: ```powershell .\build\sshpass.exe -p 114514 ssh -p11061 -o ConnectTimeout=10 -o StrictHostKeyChecking=no -o UserKnownHostsFile=NUL -o PreferredAuthentications=password -o PubkeyAuthentication=no app@10.0.255.12 ``` ## 返回码 该实现保留原版主要返回码: - `0`: 成功. - `1`: 无效命令行参数. - `2`: 密码来源参数冲突. - `3`: 通用运行时错误. - `4`: 解析错误. - `5`: 密码无效或错误. - `6`: 未知主机密钥提示. - `7`: 主机密钥变更提示. 如果子进程正常退出, 并且没有检测到 sshpass 自身的错误, 则返回子进程的退出码. ## 注意事项 `-p` 会在程序有机会降低暴露前, 把密码暴露在进程参数里. 脚本中建议优先使用 `-d`, `-f` 或 `-e`. Windows 原生支持依赖 Windows ConPTY, 目标命令应是 Windows 控制台程序 或能在 ConPTY 中正常运行的程序. 交互模式下程序会在登录前检测密码提示, 发送密码后把本地标准输入转发给远端 shell, 并让 ConPTY 输出透传到当前终端. 如果把输出重定向到文件或管道, 可能会看到远端程序产生的 VT 控制序列.