在 Go 中使用 pem/Key 进行 SSH 身份验证
使用私钥连接到远程 SSH 服务器是一种便捷的方法自动化任务并管理资源。 Go编程语言提供了ssh包,它提供了对建立SSH连接的支持。但是,文档对于如何使用私钥进行身份验证可能有些不清楚。
要使用带有 pem 密钥的 SSH 连接到服务器,您可以按照以下步骤操作:
示例:
<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>
通过按照以下步骤,您可以使用私钥建立安全的 SSH 连接,并使用 Go 标准库的 ssh 包在远程服务器上执行命令。
以上是如何在 Go 中使用 PEM/Key 进行 SSH 身份验证?的详细内容。更多信息请关注PHP中文网其他相关文章!