Go の ssh パッケージを使用してキーによる SSH 接続を確立する
キーを使用して SSH 経由でリモート サーバーに接続することは、システム管理において不可欠なタスクですそしてDevOps。 Go プログラミング言語は、SSH 接続を処理するための ssh パッケージを提供します。ただし、ドキュメントを参照するのは難しい場合があります。
次のような疑問が生じます: Go ssh パッケージのキー ファイルまたは秘密キーを使用して SSH サーバーに接続できますか?
ドキュメントには、現在「パスワード」認証方法のみがサポートされていると記載されています。キー ファイルまたは秘密キーを使用して接続を確立することは完全に可能であるため、心配する必要はありません。
この機能のロックを解除する鍵は、キー ファイルを ssh.Signer に変換し、それを ssh 内に埋め込むことにあります。 .AuthMethod.PublicKeys。このプロセスを詳しく説明するサンプル コード スニペットを次に示します。
<code class="go">import ( "crypto/ecdsa" "crypto/x509" "encoding/pem" "fmt" "io/ioutil" "log" "net" "golang.org/x/crypto/ssh" "golang.org/x/crypto/ssh/agent" ) func main() { pemBytes, err := ioutil.ReadFile("my_key.pem") if err != nil { log.Fatal(err) } block, _ := pem.Decode(pemBytes) privKey, err := x509.ParseECPrivateKey(block.Bytes) if err != nil { log.Fatal(err) } signer, err := ssh.NewSignerFromKey(privKey) if err != nil { log.Fatal(err) } auths := []ssh.AuthMethod{ssh.PublicKeys(signer)} cfg := &ssh.ClientConfig{ User: "username", Auth: auths, } cfg.SetDefaults() client, err := ssh.Dial("tcp", "aws-hostname:22", cfg) if err != nil { log.Fatal(err) } session, err := client.NewSession() if err != nil { log.Fatal(err) } stdout, err := session.Output("whoami") if err != nil { log.Fatal(err) } fmt.Println(string(stdout)) }</code>
この拡張されたコードは、キー ファイルと秘密キーの両方を処理し、より包括的なソリューションを提供します。この例では、ecdsa キーが使用されていますが、この概念はあらゆる種類の秘密キーに当てはまります。
結論:
Go ssh パッケージを使用すると、SSH 接続を確立できます。キーを使用して。当然のことながら、ドキュメントは複雑に見えるかもしれません。 ssh.PublicKeys を利用し、ssh.Signer を使用してキーを適切な形式に変換することで、シームレスに接続し、重要なシステム タスクを実行できるようになります。
以上がGo の ssh パッケージを使用してキーによる SSH 接続を確立するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。