Cheug's Blog

当前位置:网站首页 / golang / 正文

go远程ssh登录并执行shell命令

2024-05-22 / golang / 425 次围观 / 0 次吐槽 /

使用golang.org/x/crypto/ssh

package main

import (
    "fmt"
    "log"
    "golang.org/x/crypto/ssh"
)

// SSHConfig 包含SSH连接的配置
type SSHConfig struct {
    User     string
    Password string
    Host     string
    Port     string
}

// sshConnect 通过SSH连接到远程服务器
func sshConnect(config SSHConfig) (*ssh.Session, error) {
    sshConfig := &ssh.ClientConfig{
        User: config.User,
        Auth: []ssh.AuthMethod{
            ssh.Password(config.Password),
        },
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

    address := fmt.Sprintf("%s:%s", config.Host, config.Port)
    client, err := ssh.Dial("tcp", address, sshConfig)
    if err != nil {
        return nil, fmt.Errorf("failed to dial: %v", err)
    }

    session, err := client.NewSession()
    if err != nil {
        return nil, fmt.Errorf("failed to create session: %v", err)
    }

    return session, nil
}

func main() {
    config := SSHConfig{
        User:     "your_username",
        Password: "your_password",
        Host:     "your_host",
        Port:     "22",
    }

    session, err := sshConnect(config)
    if err != nil {
        log.Fatalf("failed to connect: %v", err)
    }
    defer session.Close()

    // 执行命令
    cmd := "ls -la"
    output, err := session.CombinedOutput(cmd)
    if err != nil {
        log.Fatalf("failed to run command: %v", err)
    }

    fmt.Println(string(output))
}


Powered By Cheug's Blog

Copyright Cheug Rights Reserved.