首页  >  文章  >  后端开发  >  如何在 Go 中使用 SSH 和 PEM 密钥连接到服务器?

如何在 Go 中使用 SSH 和 PEM 密钥连接到服务器?

Linda Hamilton
Linda Hamilton原创
2024-11-04 07:36:30743浏览

How to Connect to a Server Using SSH and a PEM Key in Go?

通过 Go 使用 SSH 和 PEM/密钥连接到服务器

使用 SSH 安全地连接到远程服务器是系统管理和自动化中的一项常见任务。在处理 Linux 服务器时,SSH 密钥身份验证通常比密码身份验证更受青睐,因为它提高了安全性。本文演示了如何在 Go 中使用 PEM(隐私增强邮件)密钥与远程服务器建立 SSH 连接。

Go 中的 ssh 包提供了对 SSH 连接的支持。要使用 PEM 密钥进行连接,我们需要首先将密钥解析为 ssh.Signer 对象。我们可以使用 ssh.ParsePrivateKey 函数来实现此目的。一旦我们有了 ssh.Signer,我们就可以使用 ssh.PublicKeys 创建一个 ssh.AuthMethod 对象。这个 ssh.AuthMethod 将用于向服务器进行身份验证。

准备好 ssh.AuthMethod 后,我们现在可以配置 ssh.ClientConfig 对象。我们在此配置中指定用户名、身份验证方法和其他必要参数。配置完成后,我们使用 ssh.Dial 函数建立连接。然后,我们可以使用 ssh.NewSession 创建一个新会话并在远程服务器上执行命令。

以下是概述步骤的示例代码片段:

<code class="go">import (
    "io"
    "log"
    "net"
    "os"

    "golang.org/x/crypto/ssh"
)

func main() {
    pemBytes, err := os.ReadFile("my_key.pem")
    if err != nil {
        log.Fatal(err)
    }

    signer, err := ssh.ParsePrivateKey(pemBytes)
    if err != nil {
        log.Fatal(err)
    }

    auths := []ssh.AuthMethod{ssh.PublicKeys(signer)}
    cfg := &ssh.ClientConfig{
        User: "my_user",
        Auth: auths,
    }

    conn, err := ssh.Dial("tcp", "remote_host:22", cfg)
    if err != nil {
        log.Fatal(err)
    }
    defer conn.Close()

    session, err := conn.NewSession()
    if err != nil {
        log.Fatal(err)
    }
    defer session.Close()

    stdout, err := session.StdoutPipe()
    if err != nil {
        log.Fatal(err)
    }
    if err := session.Run("whoami"); err != nil {
        log.Fatal(err)
    }

    if _, err := io.ReadAll(stdout); err != nil {
        log.Fatal(err)
    }
}</code>

按照以下步骤并使用根据提供的代码片段,您可以在 Go 程序中使用 PEM 密钥建立与远程服务器的安全 SSH 连接。

以上是如何在 Go 中使用 SSH 和 PEM 密钥连接到服务器?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn