go 代码远程链接服务器执行脚本

今天想用go实现远程链接服务器,并且实现服务器脚本操作,于是就实现了以下代码,可用账号密码链接服务器,和本地私钥链接。

账号密码链接

代码如下

// 服务器地址和端口
    server := "127.0.0.1"
    port := 22

    // 用户名和密钥文件路径
    username := "root"
    password := "123456"

    // 配置 SSH 客户端
    config := &ssh.ClientConfig{
        User: username,
        Auth: []ssh.AuthMethod{
            ssh.Password(password),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 注意:这是一个不安全的设置,实际应用中应根据需要进行修改
    }

    // 连接到 SSH 服务器
    client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", server, port), config)
    if err != nil {
        fmt.Printf("无法连接到 SSH 服务器: %v \n", err)
        return err
    }
    defer client.Close()

    // 执行远程命令
    session, err := client.NewSession()
    if err != nil {
        fmt.Printf("无法创建 SSH 会话: %v", err)
        return err
    }
    defer session.Close()

    // 设置远程脚本命令
    scriptCommand := "echo '链接成功'"

    // 执行远程脚本
    output, err := session.CombinedOutput(scriptCommand)
    if err != nil {
        fmt.Printf("无法执行远程脚本: %v", err)
        return err
    }

    // 输出远程脚本执行结果
    fmt.Println(string(output))
    return nil

本地私钥链接

代码如下

// 服务器地址和端口
    server := "127.0.0.1"
    port := 22

    // 用户名和密钥文件路径
    username := "root"
    keyPath := "/path/to/your/private-key"

    // 读取私钥文件
    key, err := ioutil.ReadFile(keyPath)
    if err != nil {
        log.Fatalf("无法读取私钥文件: %v", err)
    }

    // 解析私钥
    signer, err := ssh.ParsePrivateKey(key)
    if err != nil {
        log.Fatalf("无法解析私钥: %v", err)
    }

  // 配置 SSH 客户端
    config := &ssh.ClientConfig{
        User: username,
        Auth: []ssh.AuthMethod{
            ssh.PublicKeys(signer),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(), // 注意:这是一个不安全的设置,实际应用中应根据需要进行修改
    }

    // 连接到 SSH 服务器
    client, err := ssh.Dial("tcp", fmt.Sprintf("%s:%d", server, port), config)
    if err != nil {
        fmt.Printf("无法连接到 SSH 服务器: %v \n", err)
        return err
    }
    defer client.Close()

    // 执行远程命令
    session, err := client.NewSession()
    if err != nil {
        fmt.Printf("无法创建 SSH 会话: %v", err)
        return err
    }
    defer session.Close()

    // 设置远程脚本命令
    scriptCommand := "echo '链接成功'"

    // 执行远程脚本
    output, err := session.CombinedOutput(scriptCommand)
    if err != nil {
        fmt.Printf("无法执行远程脚本: %v", err)
        return err
    }

    // 输出远程脚本执行结果
    fmt.Println(string(output))
    return nil
本作品采用《CC 协议》,转载必须注明作者和本文链接
siya
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!