Golang Go语言中如何使用 go 调用 ssh 命令实现交互式的终端,并调整终端的长宽

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

Golang Go语言中如何使用 go 调用 ssh 命令实现交互式的终端,并调整终端的长宽

调用 linux 自带的 ssh 命令实现交互的访问时,怎么调整长和宽

5 回复

var s *ssh.Session
s.WindowChange(resize.Rows, resize.Cols)

更多关于Golang Go语言中如何使用 go 调用 ssh 命令实现交互式的终端,并调整终端的长宽的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


不用 session,直接使用 linux 自带的 ssh
使用 exec.Command,这种有没有办法实现呢

我弄过,不太完美

cmd := exec.Command(“ssh”, “-t”. “xxxx”)
cmd.Stdout = os.Stdout
cmd.Stdin = os.Stdin
cmd.Stderr = os.Stderr
cmd.Run()

恩,我是按照这个实现的,不过 ssh -t 之后分配的 pty 没有办法调整窗口的大小

在Go语言中,使用golang.org/x/crypto/ssh包可以实现通过SSH调用远程命令,并创建交互式的终端会话。要调整终端的长宽,可以通过设置终端窗口的大小来实现。以下是一个基本的实现示例:

  1. 安装依赖: 首先,确保你已经安装了golang.org/x/crypto/ssh包。你可以通过以下命令安装:

    go get golang.org/x/crypto/ssh
    
  2. 代码实现: 下面是一个示例代码,展示了如何通过SSH建立一个交互式终端会话,并调整终端窗口的大小:

    package main
    
    import (
        "golang.org/x/crypto/ssh"
        "log"
        "os"
        "golang.org/x/term"
    )
    
    func main() {
        // 配置SSH客户端(略)
        // ...
        
        session, err := client.NewSession()
        if err != nil {
            log.Fatal(err)
        }
        
        fd := int(session.Stdout.(*os.File).Fd())
        if term.IsTerminal(fd) {
            oldState, err := term.MakeRaw(fd)
            if err != nil {
                log.Fatal(err)
            }
            defer term.Restore(fd, oldState)
            
            winSize, err := term.GetSize(fd)
            if err == nil {
                session.Stdout.(*os.File).Write(ssh.WindowChange(winSize.Width, winSize.Height))
            }
        }
        
        // 启动交互式shell
        if err := session.Run("/bin/bash"); err != nil {
            log.Fatal(err)
        }
    }
    

这个示例代码展示了如何设置SSH会话、调整终端窗口大小,并启动一个交互式shell。注意,这里的错误处理和配置SSH客户端部分需要根据你的实际情况进行填充。

回到顶部