>  기사  >  백엔드 개발  >  PEM/Key in Go를 사용하여 SSH에 인증하는 방법은 무엇입니까?

PEM/Key in Go를 사용하여 SSH에 인증하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-04 01:47:01449검색

How to Authenticate to SSH with a PEM/Key in Go?

pem/Key in Go를 사용하여 SSH 인증

개인 키를 사용하여 원격 SSH 서버에 연결하는 것이 편리한 방법입니다. 작업을 자동화하고 리소스를 관리합니다. Go 프로그래밍 언어는 SSH 연결 설정을 지원하는 ssh 패키지를 제공합니다. 그러나 개인 키로 인증하는 방법에 관한 문서는 다소 불분명할 수 있습니다.

pem 키로 SSH를 사용하여 서버에 연결하려면 다음 단계를 따르세요.

  1. 서명자 얻기: 개인 키에서 ssh.Signer를 얻어야 합니다. 이는 특정 키 유형(예: rsa, dsa, ecdsa)에 대해 ssh.ParsePrivateKey 함수 또는 ssh.NewSignerFromKey 함수를 사용하여 수행할 수 있습니다.
  2. AuthMethod 생성: 서명자 개체 변환 ssh.PublicKeys 함수를 사용하여 ssh.AuthMethod에 추가합니다. 이렇게 하면 서명자를 래핑하고 SSH 연결 중에 인증에 사용할 수 있습니다.
  3. ClientConfig 구성: 인증 방법, 사용자 이름 및 기타 항목을 포함하는 ssh.ClientConfig 개체를 설정합니다. 필요한 구성 매개변수.
  4. 연결 다이얼링: ssh.Dial 기능을 사용하여 ClientConfig를 사용하여 원격 서버에 대한 연결을 설정합니다.
  5. 세션 생성 : 연결이 설정되면 ssh.Session을 생성하여 원격 서버에서 명령을 실행합니다.

예:

<code class="go">package main

import (
    "crypto/x509"
    "fmt"
    "io/ioutil"
    "log"
    "net"
    "os"

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

func main() {
    // Parse the private key
    key, err := ioutil.ReadFile("mykey.pem")
    if err != nil {
        log.Fatal(err)
    }

    // Get the signer
    signer, err := ssh.ParsePrivateKey(key)
    if err != nil {
        log.Fatal(err)
    }

    // Switch to using an agent if SSH_AUTH_SOCK is set
    if authSock := os.Getenv("SSH_AUTH_SOCK"); authSock != "" {
        sock, err := net.Dial("unix", authSock)
        if err != nil {
            log.Fatalf("Failed to connect to agent: %v", err)
        }
        _ = sock
        // TODO(harsh)
        // Implement working with agent.
    }

    // Create the AuthMethod
    authMethods := []ssh.AuthMethod{ssh.PublicKeys(signer)}

    // Set up the ClientConfig
    clientConfig := &ssh.ClientConfig{
        User:            "username",
        Auth:            authMethods,
        HostKeyCallback: ssh.InsecureIgnoreHostKey(),
    }

    // Dial the connection
    client, err := ssh.Dial("tcp", "aws-hostname:22", clientConfig)
    if err != nil {
        log.Fatal(err)
    }

    // Create a session
    session, err := client.NewSession()
    if err != nil {
        log.Fatal(err)
    }

    // Execute a command
    output, err := session.Output("whoami")
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println("Output:", string(output))

    // Close the session and client
    _ = session.Close()
    _ = client.Close()
}</code>

By 다음 단계에 따라 개인 키를 사용하여 보안 SSH 연결을 설정하고 Go 표준 라이브러리의 SSH 패키지를 사용하여 원격 서버에서 명령을 실행할 수 있습니다.

위 내용은 PEM/Key in Go를 사용하여 SSH에 인증하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.