Wie verbinde ich mich über SSH mit einem privaten Schlüssel in Golang mit einem Remote-Server?

DDD
Freigeben: 2024-11-05 13:36:02
Original
270 Leute haben es durchsucht

How to Connect to a Remote Server Using SSH with a Private Key in Golang?

Herstellen einer Verbindung zu einem Remote-Server über SSH mit privatem Schlüssel in Golang

Die Verwendung des SSH-Pakets in Go ermöglicht bequeme Verbindungen zu Remote-Servern über SSH-Protokolle. Der Aufbau von Verbindungen mit privaten Schlüsseln erfordert jedoch ein tieferes Verständnis der Funktionalität des Pakets.

Das SSH-Paket bietet Unterstützung für verschiedene Authentifizierungsmethoden, einschließlich Passwortauthentifizierung. Die in der Paketdokumentation erwähnte Dial-Funktion ermöglicht es Benutzern, die Authentifizierungsmethode anzugeben, die beim Verbindungsaufbau verwendet werden soll. Um einen privaten Schlüssel zur Authentifizierung zu nutzen, müssen wir zusätzliche, vom Paket bereitgestellte Methoden verwenden.

Die PublicKeys-Funktion spielt in diesem Szenario eine entscheidende Rolle. Es hilft bei der Umwandlung einer Sammlung von SSH-Unterzeichnern in einen Authentifizierungsmechanismus. Diese Unterzeichner können mit verschiedenen Methoden abgerufen werden, einschließlich der Analyse aus PEM-Bytedarstellungen. Die Möglichkeit, private RSA-, DSA- oder ECDSA-Schlüssel direkt zu nutzen, wird auch durch die Verwendung der NewSignerFromKey-Funktion unterstützt.

Betrachten wir ein Beispiel, das die praktische Umsetzung dieser Konzepte demonstriert. Dieses Beispiel beinhaltet die Unterstützung der agentenbasierten Authentifizierung, die normalerweise auf die Verwendung der Authentifizierung mit privatem Schlüssel folgt.

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

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

func main() {
    // Establishes a connection to the SSH Agent
    sock, err := net.Dial("unix", os.Getenv("SSH_AUTH_SOCK"))
    if err != nil {
        log.Fatal(err)
    }
    agent := agent.NewClient(sock)

    // Acquires signers from the SSH Agent
    signers, err := agent.Signers()
    if err != nil {
        log.Fatal(err)
    }

    // Creates a list of authentication methods using the signers obtained
    auths := []ssh.AuthMethod{ssh.PublicKeys(signers...)}

    // Configures the client using the username and authentication details
    cfg := &ssh.ClientConfig{
        User: "username",
        Auth: auths,
    }
    cfg.SetDefaults()

    // Establishes a connection to the remote server
    client, err := ssh.Dial("tcp", "aws-hostname:22", cfg)
    if err != nil {
        log.Fatal(err)
    }

    // Creates a new session in the established connection
    session, err = client.NewSession()
    if err != nil {
        log.Fatal(err)
    }

    log.Println("Successfully established a session!")
}</code>
Nach dem Login kopieren

Mit diesem erweiterten Codebeispiel ist es möglich, mithilfe eines privaten Schlüssels über SSH eine Remoteverbindung zu einem Server herzustellen Paket in Go. Zusätzliche Funktionen wie die agentenbasierte Authentifizierung wurden ebenfalls integriert, um den gesamten Prozess umfassender zu demonstrieren.

Das obige ist der detaillierte Inhalt vonWie verbinde ich mich über SSH mit einem privaten Schlüssel in Golang mit einem Remote-Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!