質問編集履歴
6
軽微な修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Goのsshサーバに関する質問です.
|
2
2
|
Goの標準ライブラリを使ってsshサーバを実装するさいに,クライアントから受け付ける認証方法を以下のようにサーバに設定すると思います.
|
3
3
|
|
4
|
-
ここで,質問なんですがクライアントからのconfigのAuthMethodに設定が無かったときのcallbackをサーバに設定できないでしょうか.pubkeyやpasswordの設定があった場合は通常どうりに各callbackを呼んでほしいです.
|
4
|
+
ここで,質問なんですがクライアントからのconfigのAuthMethodに設定が無かったときのcallbackをサーバに設定できないでしょうか.pubkeyやpasswordの設定があった場合は通常どうりに各callbackを呼んでほしいです.サーバはユーザの情報によって振る舞いを変えます.
|
5
5
|
```
|
6
6
|
// クライアントのconfig
|
7
7
|
config := &ssh.ClientConfig{
|
@@ -16,8 +16,8 @@
|
|
16
16
|
```
|
17
17
|
// サーバのconfig
|
18
18
|
config := &ssh.ServerConfig{
|
19
|
+
// clientからのAuthが設定されていない場合に呼んでほしい
|
19
20
|
NoAuthCallback(conn ssh.ConnMetadata) {
|
20
|
-
// clientからのAuthが設定されていない場合に呼んでほしい
|
21
21
|
authMethod := getAuthMethodsFromDB(conn.User())
|
22
22
|
// authMethodが認証なしでないなら通さない
|
23
23
|
if authMethod != "none" {
|
5
ソースコードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -19,16 +19,18 @@
|
|
19
19
|
NoAuthCallback(conn ssh.ConnMetadata) {
|
20
20
|
// clientからのAuthが設定されていない場合に呼んでほしい
|
21
21
|
authMethod := getAuthMethodsFromDB(conn.User())
|
22
|
-
//
|
22
|
+
// authMethodが認証なしでないなら通さない
|
23
23
|
if authMethod != "none" {
|
24
24
|
return NG
|
25
25
|
}
|
26
|
+
return OK
|
26
27
|
},
|
27
28
|
PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) {
|
28
29
|
// publickey認証時の処理
|
29
30
|
authMethod := getAuthMethodsFromDB(conn.User())
|
30
31
|
switch authMethod {
|
31
32
|
case "none":
|
33
|
+
// DB側がnoneなら通す
|
32
34
|
return OK
|
33
35
|
case "pubkey":
|
34
36
|
return 公開鍵認証の結果
|
4
ソースコードを詳しくした
title
CHANGED
File without changes
|
body
CHANGED
@@ -16,15 +16,25 @@
|
|
16
16
|
```
|
17
17
|
// サーバのconfig
|
18
18
|
config := &ssh.ServerConfig{
|
19
|
-
NoAuthCallback() {
|
19
|
+
NoAuthCallback(conn ssh.ConnMetadata) {
|
20
20
|
// clientからのAuthが設定されていない場合に呼んでほしい
|
21
|
+
authMethod := getAuthMethodsFromDB(conn.User())
|
22
|
+
// authMethodsに認証なしがない
|
23
|
+
if authMethod != "none" {
|
24
|
+
return NG
|
25
|
+
}
|
21
26
|
},
|
22
|
-
PasswordCallback: func(conn ssh.ConnMetadata, pass []byte) (*ssh.Permissions, error) {
|
23
|
-
// password認証時の処理
|
24
|
-
},
|
25
27
|
PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) {
|
26
28
|
// publickey認証時の処理
|
29
|
+
authMethod := getAuthMethodsFromDB(conn.User())
|
30
|
+
switch authMethod {
|
31
|
+
case "none":
|
32
|
+
return OK
|
33
|
+
case "pubkey":
|
34
|
+
return 公開鍵認証の結果
|
35
|
+
}
|
36
|
+
}
|
27
37
|
},
|
28
38
|
}
|
29
39
|
```
|
30
|
-
どなたかご教授お願いします
|
40
|
+
どなたかご教授お願いします.
|
3
タイトルの変更
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
認証メソッド設定ないsshクライアントへのサーバのコールバック設定方法
|
1
|
+
認証メソッド設定がないsshクライアントへのサーバのコールバック設定方法
|
body
CHANGED
File without changes
|
2
タイトルの編集
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
|
1
|
+
認証メソッド設定ないsshクライアントへのサーバのコールバック設定方法
|
body
CHANGED
File without changes
|
1
タイトルの修正
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
ssh
|
1
|
+
sshクライアントの認証メソッド設定ないのサーバのコールバック方法
|
body
CHANGED
File without changes
|