Goのsshサーバに関する質問です.
Goの標準ライブラリを使ってsshサーバを実装するさいに,クライアントから受け付ける認証方法を以下のようにサーバに設定すると思います.
ここで,質問なんですがクライアントからのconfigのAuthMethodに設定が無かったときのcallbackをサーバに設定できないでしょうか.pubkeyやpasswordの設定があった場合は通常どうりに各callbackを呼んでほしいです.サーバはユーザの情報によって振る舞いを変えます.
// クライアントのconfig config := &ssh.ClientConfig{ User: "user", Auth: []ssh.AuthMethod{ // 設定なし }, HostKeyCallback: ssh.InsecureIgnoreHostKey(), }
上記のようなクライアントのconfigを作成したときにサーバでは NoAuthCallback() のようなものを設定したいです.
// サーバのconfig config := &ssh.ServerConfig{ // clientからのAuthが設定されていない場合に呼んでほしい NoAuthCallback(conn ssh.ConnMetadata) { authMethod := getAuthMethodsFromDB(conn.User()) // authMethodが認証なしでないなら通さない if authMethod != "none" { return NG } return OK }, PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) { // publickey認証時の処理 authMethod := getAuthMethodsFromDB(conn.User()) switch authMethod { case "none": // DB側がnoneなら通す return OK case "pubkey": return 公開鍵認証の結果 } } }, }
どなたかご教授お願いします.
回答1件
あなたの回答
tips
プレビュー