go中的交互式ssh会话

k5ifujac  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(153)

ssh交互式会话
大家好,我正在学习golang来构建cli工具,我只是想复制一些我已经在bash中练习过的东西。我想用golang打开ssh交互终端。我尝试使用官方的golang.org/cryptop/ssh软件包,但无法找到满足我需求的解决方案。我是新来的,因此我可能没有完全理解这份文件。我尝试了这个

package main

import (
    "fmt"
    "os"
    "os/exec"
)

func main() {
    InitServer("152.xx.xx.xx", "ubuntu", "password")
}

const PORT = "22"

func InitServer(server, user, password string) {
    
    sshCommand := exec.Command("ssh", user+"@"+server)

    // Set the standard input, output, and error streams to the current process's streams
    sshCommand.Stdin = os.Stdin
    sshCommand.Stdout = os.Stdout
    sshCommand.Stderr = os.Stderr

    ssh_err := sshCommand.Run()
    if ssh_err != nil {
        fmt.Println("Failed to run SSH command:", ssh_err)
    }

}

这在Linux上可以工作,但在Windows中运行main.go时不行。Failed to run SSH command: exec: "ssh": executable file not found in %PATH%我也尝试添加ssh.exe位置到路径变量像这样

sshPath := "C:\\Windows\\System32\\OpenSSH\\ssh.exe"

    path := os.Getenv("PATH")
    newPath := sshPath + ";" + path

    os.Setenv("PATH", newPath)

    fmt.Println("Updated PATH:", os.Getenv("PATH"))
Updated PATH: C:\Windows\System32\OpenSSH\ssh.exe;C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin

有没有办法解决这个问题,或者有没有更好的方法使用官方的crypto/ssh包?

epggiuax

epggiuax1#

对于使用crypto/ssh,有几种解决方案,如this,您可以在单独的问题中提出您的问题,以获得正确的答案。
但是对于上面的情况,在Windows系统上使用you can installopenssh来执行ssh命令。

相关问题