Golang Go语言中怎么执行需要输入密码的 shell 命令

发布于 1周前 作者 sinazl 来自 Go语言

Golang Go语言中怎么执行需要输入密码的 shell 命令

例如: 执行这个命令
ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]
需要输入密码
大佬们这个如何实现

9 回复

更多关于Golang Go语言中怎么执行需要输入密码的 shell 命令的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


没试过 看了一下 cmd 里面有个 StdIn 应该往里面写入密码就可以

都用 golang 了,就可以直接实现 ssh client 了
建议参考 https://github.com/chazyu1996/leap

一般用密钥的话,就不用这个了吧

cloudflare 的律师已经在来的路上了 /狗头

两种方法

1 使用 ssh 库 exec 命令去,不用输入密码

2 、exec.Command 设置 Stdin 就可以了。

在Golang中执行需要输入密码的shell命令,通常会遇到输入重定向的难题,因为直接调用os/exec包运行命令时,无法直接传递密码输入。以下是一种常见的解决方法,利用expect脚本或类似的工具来自动化处理交互。

使用expect脚本

  1. 编写expect脚本: 创建一个expect脚本(例如run_command.exp),用于自动输入密码。

    #!/usr/bin/expect
    set timeout -1
    set password "your_password"
    spawn your_command_here
    expect "Password:"
    send "$password\r"
    expect eof
    
  2. 在Go中调用expect脚本: 使用os/exec包在Go程序中调用这个expect脚本。

    package main
    
    import (
        "os/exec"
        "log"
    )
    
    func main() {
        cmd := exec.Command("/path/to/expect", "/path/to/run_command.exp")
        err := cmd.Run()
        if err != nil {
            log.Fatal(err)
        }
    }
    

注意事项

  • 安全性:直接在脚本中存储密码不安全,建议使用更安全的方式传递密码,如环境变量或安全的密钥管理服务。
  • 跨平台expect主要在Unix-like系统上可用,Windows上可能需要使用其他工具,如PowerShell脚本。
  • 权限:确保Go程序有足够的权限执行expect脚本和目标命令。
回到顶部