Golang 写入输入并从终端进程获取输出

2023-12-06

我有一个关于如何从终端子进程(例如 ssh)发送输入和接收输出的问题。 python 中的一个例子是这样的:

如何为子进程提供密码并同时获取标准输出

我在 Golang 中找不到与上述工作方式类似的简单示例。

在 Golang 中,我想做这样的事情,但它似乎不起作用:

    cmd := exec.Command("ssh", "[email protected]")
    cmd.Stdout = os.Stdout
    cmd.Stderr = os.Stderr
    stdin, _ := cmd.StdinPipe()
    stdin.Write([]byte("password\n"))
    cmd.Run()

然而;我不知道如何在 go 中执行此操作,因为每次执行此 ssh 命令时,我只能获得输出。我无法从代码中自动输入密码。 有人有写入终端进程(例如 ssh)的示例吗?如果有,请分享。


感谢上面的评论,我能够使用密码获得 ssh 访问权限。我使用了golang的ssh api库。这非常简单,因为我遵循了以下示例:

https://code.google.com/p/go/source/browse/ssh/example_test.go?repo=crypto

具体来说:

func ExampleDial() {
    // An SSH client is represented with a ClientConn. Currently only
    // the "password" authentication method is supported.
    //
    // To authenticate with the remote server you must pass at least one
    // implementation of AuthMethod via the Auth field in ClientConfig.
    config := &ClientConfig{
            User: "username",
            Auth: []AuthMethod{
                    Password("yourpassword"),
            },
    }
    client, err := Dial("tcp", "yourserver.com:22", config)
    if err != nil {
            panic("Failed to dial: " + err.Error())
    }

    // Each ClientConn can support multiple interactive sessions,
    // represented by a Session.
    session, err := client.NewSession()
    if err != nil {
            panic("Failed to create session: " + err.Error())
    }
    defer session.Close()

    // Once a Session is created, you can execute a single command on
    // the remote side using the Run method.
    var b bytes.Buffer
    session.Stdout = &b
    if err := session.Run("/usr/bin/whoami"); err != nil {
            panic("Failed to run: " + err.Error())
    }
    fmt.Println(b.String())
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Golang 写入输入并从终端进程获取输出 的相关文章

  • 在谷歌云上训练神经网络时出现“无法获取路径的文件系统”错误

    我正在使用 Google Cloud 在云上训练神经网络 如下例所示 https cloud google com blog big data 2016 12 how to classify images with tensorflow u
  • VS Code 即使关闭也使用 100% CPU

    即使未打开 VS Code 也会占用 100 的 CPU 使用率 我跑了ps aux grep PID命令查看详细信息但什么也看不懂 这是输出 tawhid 27099 100 0 0 1 447352160 11856 R 7 18PM
  • 如何将 int[] 转换为 uint8[]

    所以 我需要你的帮助 我找不到关于该主题的任何内容 Golang 是一门刚刚诞生的语言 所以对于像我这样的新手来说很难快速找到答案 预先声明的 Goint类型大小是特定于实现的 32 位或 64 位 数字类型 http golang org
  • 复杂数据类型作为 Go 中映射的键

    我正在尝试在 Go 中创建一个由大整数作为键的映射 effective Go 明确指出 结构体 数组和切片不能用作映射键 因为这些类型上没有定义相等性 这是有道理的 我当然可以将大整数转换为字符串并使用字符串作为键 但我在这里寻找更通用的解
  • 如何在golang中创建一个充满“000000...”数据的10MB文件?

    我打算在日志或磁盘队列等系统中使用 fdatasync 首先是在 ext4 等文件系统中创建一个带有 000000 的 10MB 文件 但我不知道如何正确地做到这一点 jnml fsc r630 src tmp SO 16797380 ls
  • 正确的文件扩展名或缩写是什么。 golang 的文本/模板?

    我正在考虑为其创建语法荧光笔 但我不知道这种特定类型模板的常规缩写 In 例子之一 http golang org pkg text template example Template helpers从文本 模板 godoc 中 它们引用
  • Android上如何模拟后台Activity因内存不足而被系统杀死的过程?

    我正在处理 内存不足 不再有后台进程 问题 当这种情况发生时 我的活动处于后台并被杀死 我正在尝试保存并加载实例状态来解决它 但因为它并不是每次都会发生 在这种情况下我应该如何测试我的活动 Thanks 您可以通过 adb 强制进程终止 g
  • 如何在golang中解析JSON而不需要解组两次

    我有一个 Web 套接字连接 它在 JSON 对象中发送不同类型的消息 并且我想将内容解组到一些已知的结构中 为此 我认为我应该执行以下操作 步骤 1 将 JSON 解组为通用映射 字符串 接口 步骤 2 找到我要找的钥匙 步骤 3 尝试将
  • 为什么 json.Unmarshal 返回映射而不是预期的结构?

    看看这个游乐场 http play golang org p dWku6SPqj5 http play golang org p dWku6SPqj5 基本上 我正在工作的图书馆收到了interface 作为参数 然后需要json Unma
  • 如何同时使用 LoadHTMLGlob 和 LoadHTMLFiles

    我想要来自不同子目录的分隔符逻辑模板templates文件夹 下面是我的templates文件夹 templates authentication login gohtml logout gohtml index gohtml profil
  • 查找进程的完整路径

    我已经编写了 C 控制台应用程序 当我启动应用程序时 不使用cmd 我可以看到它列在任务管理器的进程列表中 现在我需要编写另一个应用程序 在其中我需要查找以前的应用程序是否正在运行 我知道应用程序名称和路径 所以我已将管理对象搜索器查询写入
  • RSA OAEP、Golang 加密、Java 解密 -BadPaddingException:解密错误

    我正在尝试解密使用 RSA OAEP 在 Golang 中加密的字符串 但出现 BadPaddingException 解密错误 很难弄清楚我错过了什么 这是Golang加密方法 func encryptString rootPEM io
  • 带重定向标准流的 C# + telnet 进程立即退出

    我正在尝试用 C 做一个 脚本化 telnet 项目 有点类似于Tcl期望 http expect nist gov 我需要为其启动 telnet 进程并重定向 和处理 其 stdin stdout 流 问题是 生成的 telnet 进程在
  • 解压文件的简单方法

    有没有一种简单的方法可以用 Go 解压文件 现在我的代码是 func Unzip src dest string error r err zip OpenReader src if err nil return err defer r Cl
  • 什么是 .un~ 文件或者为什么终端中的 Vim 会创建 .un~ 文件?

    我注意到我有一些以 un 例如我有一个 vividchalk vim un 但我不确定它是从哪里来的 看起来它们是我在终端中使用 Vim 时创建的 这些文件是什么 当我关闭正在编辑的文件时 可以让它们自行删除吗 当你编辑和保存文件时 Vim
  • golang中通道缓冲容量0和1的区别

    我已将通道缓冲区大小设置为零 例如var intChannelZero make chan int 当从intChannelZero将被阻止 直到intChannelZero有价值 另外 我将通道缓冲区大小设置为 1 例如var intCh
  • 什么时候返回结构体指针是个好主意?

    我正在学习 Go 我对何时使用指针有点困惑 具体来说 当返回一个struct从函数中 什么时候适合返回结构体实例本身 什么时候适合返回指向结构体的指针 示例代码 type Car struct make string model strin
  • Go客户端程序生成大量TIME_WAIT状态的socket

    我有一个 Go 程序 它从多个 goroutine 生成大量 HTTP 请求 运行一段时间后 程序报错 connect cannot allocaterequestedaddress 当检查时netstat 我得到大量 28229 个连接T
  • 如何在 Powershell 中设置低 I/O(“后台”)优先级

    There s 这个powershell脚本 https stackoverflow com a 4302 1266650它可以将进程的优先级从 空闲 设置为 实时 但某些工具提供另一个优先级 该优先级甚至会降低进程的优先级 如何在 Pow
  • golang.org 包和标准库之间的区别

    我使用 go 已经有一段时间了 我注意到 Go 标准库 和 golang org x 之间存在重复的包 我的问题是 为什么它们被释放两次 在这两者中 我应该使用哪一个 更新的 规范的等 到目前为止我注意到的一些示例包已发布两次 golang

随机推荐

  • Powershell - 我的倒计时器出了什么问题

    我有一个计数器脚本需要两个参数 1 计数器启动前等待的秒数 2 计数器持续时间 以秒为单位 例如 如果我输入 3 10 我希望 3 秒后计时器将从 10 倒计时到 0 并每秒将其写入输出 这是我的脚本 timeBeforeStart arg
  • iOS:CAShapeLayer 路径转换

    我用过CAShape Layer在对路径进行基本变换之前 从较小的圆圈到较大的圆圈 足够好了 但后来我尝试将三角形变成圆形 它有效 但转变很奇怪 换句话说 从一种形状到另一种形状 在形成最终形状之前 它会 翻转 扭曲 对于相同的形状 没有问
  • ASP.NET 捕获并替换 Global.asax 中的输出

    我需要替换从我网站上每个页面发送的一些数据 我认为可以使用 Global asax 来完成 这是我迄今为止尝试过的 void Application PreSendRequestContent object sender EventArgs
  • Azure 成本导出应用什么业务逻辑?

    我想要获取 Azure 中最新的实际成本 似乎有 4 种方法可以实现不同的结果 将成本导出到存储帐户 成本管理API 计费接口 消费API 第 1 种效果很好 但我需要一个 API 而不是文件转储 第 2 种似乎是为了通过高速维度查询为成本
  • 这里 API 偏移地图中心

    我正在使用 Here Android SDK API 我通过以下方式设置位置指示器 positionManager start PositioningManager LocationMethod GPS NETWORK map getPos
  • MongoDB / Express - 如何在通过 connect() 连接后切换数据库

    我正在使用 Express 连接到我的 mongoDB mongodb MongoClient connect mongourl function err database How would one switch to another d
  • HttpClient 异步方法会在新线程中运行吗

    我想知道是否 NetHttpClient async方法在新线程或主线程中运行 例如 在我的控制台应用程序中 我调用async使用以下方法下载 URL 内容HttpClient GetStringAsync method 此方法 GetSt
  • SQL:从 2 个表创建完整记录

    我有一个数据库结构 为了理解问题而简化为最大 Table entry id integer primary key Table fields name varchar primary key and others Table entry f
  • Apache 重写没有 mod_rewrite?

    在没有启用或配置 mod rewrite 的情况下 Apache 如何重写 URL 我正在从我的开发服务器重新设计网站 我在网站部分使用目录结构 但我正在考虑切换到 URL 重写并将相关文件放在网站的根目录中 例如 about 页面有一个名
  • git 从 Linux 克隆到 TFS git 存储库

    我一直在尝试解决托管在本地 TFS2017 上的 Git 存储库的问题 无法从不在域中的 Linux 计算机上执行 git clone 命令 继续获取 致命 身份验证失败 我使用的用户是Linux机器上的本地用户 与域用户同名 密码相同 用
  • Android Volley POST 参数

    我需要调用一个需要字符串数组作为 POST 参数的 api 例如 API 定义 POST api names 预期的 POST 参数是一个名称数组和一些其他属性 如下所示 names John Bill department Enginee
  • Mongodb 在带有正则表达式查询的数组字段上不同?

    基本上我正在尝试在模型上实现标签功能 gt db event distinct tags bar foo foobar 进行简单的不同查询会检索所有不同的标签 但是 我将如何获取与某个查询匹配的所有不同标签 举例来说 我想获得所有匹配的标签
  • Android:尝试在运行时更改 TextView 的宽度

    我有一个文本视图 我试图在运行时更改其大小 但尺寸不变 xml文件中的代码
  • 我可以将图像表单数据传递给 PHP 函数进行上传吗?

    我正在尝试使用 jquery 和 PHP 上传图像 如下所示 HTML
  • 为什么“ps”中没有出现“echo”?

    我很难理解 ps 命令上显示的内容 为了测试我的理解 我创建了下面的虚拟脚本 bin bash for i in 1 100000 do date u date u date u done 运行此脚本时 我打开了一个新终端并重复执行 ps
  • Ajax 响应:[readyState:0,responseText:“”,状态:0,statusText:“错误”]

    我的 ajax 调用导致错误 这是我可以在错误回调中获得的信息 readyState 0 responseText status 0 statusText error 这意味着什么 我究竟做错了什么 这是我的 ajax 调用 var aja
  • 使用where条件创建唯一索引

    现在我有下面的用户表 并且希望电子邮件列在 id 有前缀时唯一auth0 column id text email text not null 所以我尝试了这个CREATE UNIQUE INDEX陈述 CREATE UNIQUE INDE
  • 如何使图像适合框架,保持纵横比并在缩略图列表中居中

    我想将列表缩略图框显示为数据网格 每个缩略图必须放置在具有特定宽度和高度的框架中 为了一致性 如下所示 div class frame img src img1 jpg div div class frame img src img2 jp
  • PHP 中如何将数组元素转换为字符串?

    如果我有一个包含对象的数组 a array objA objB 每个对象都有一个 toString method 如何将所有数组元素转换为字符串 以便数组 a除了它们的字符串表示之外不再包含任何对象 是否有单行或我必须手动循环数组 一行 a
  • Golang 写入输入并从终端进程获取输出

    我有一个关于如何从终端子进程 例如 ssh 发送输入和接收输出的问题 python 中的一个例子是这样的 如何为子进程提供密码并同时获取标准输出 我在 Golang 中找不到与上述工作方式类似的简单示例 在 Golang 中 我想做这样的事