Das sichere Herstellen einer Verbindung mit einem Remote-Server über SSH ist eine häufige Aufgabe in der Systemadministration und -automatisierung. Beim Umgang mit Linux-Servern wird die SSH-Schlüsselauthentifizierung aufgrund der erhöhten Sicherheit häufig der Passwortauthentifizierung vorgezogen. In diesem Artikel wird gezeigt, wie Sie mithilfe eines PEM-Schlüssels (Privacy Enhanced Mail) in Go eine SSH-Verbindung zu einem Remote-Server herstellen.
Das SSH-Paket in Go bietet Unterstützung für SSH-Verbindungen. Um eine Verbindung über einen PEM-Schlüssel herzustellen, müssen wir den Schlüssel zunächst in ein ssh.Signer-Objekt analysieren. Zu diesem Zweck können wir die Funktion ssh.ParsePrivateKey verwenden. Sobald wir einen ssh.Signer haben, können wir mit ssh.PublicKeys ein ssh.AuthMethod-Objekt erstellen. Diese ssh.AuthMethod wird zur Authentifizierung beim Server verwendet.
Sobald die ssh.AuthMethod bereit ist, können wir jetzt das ssh.ClientConfig-Objekt konfigurieren. In dieser Konfiguration geben wir den Benutzernamen, die Authentifizierungsmethode und andere notwendige Parameter an. Sobald die Konfiguration eingerichtet ist, verwenden wir die Funktion ssh.Dial, um die Verbindung herzustellen. Anschließend können wir mit ssh.NewSession eine neue Sitzung erstellen und Befehle auf dem Remote-Server ausführen.
Hier ist ein Beispiel-Codeausschnitt, der die Schritte beschreibt:
<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>
Indem Sie diese Schritte befolgen und verwenden Mit dem bereitgestellten Code-Snippet können Sie mithilfe eines PEM-Schlüssels in Ihren Go-Programmen eine sichere SSH-Verbindung zu einem Remote-Server herstellen.
Das obige ist der detaillierte Inhalt vonWie verbinde ich mich über SSH und einen PEM-Schlüssel in Go mit einem Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!