golang.org/x/crypto/sshServerConfigPublicKeyCallback
PublicKeyauthorized_keys
PublicKeyCallback
公钥身份认证
Open-SSHpublickeyOpen-SSHpasswordServerConfig
nonepasswordpublickey
nonepassword
自始至终 Open-SSH 都不会动用密钥身份验证方式来连接用 golang ssh 包编写的服务器。
none
过程如下:
golang ssh 身份验证逻辑
golang.org/x/crypto/sshserver.gofor
MaxAuthTries
switch
PublickeyCallbacknone
userAuthFailureMsg
byte SSH_MSG_USERAUTH_FAILURE
name-list authentications that can continue
boolean partial success
在 golang 中定义如下:
type userAuthFailureMsg struct {
Methods []string `sshtype:"51"`
PartialSuccess bool
}
Open-SSH 的连接逻辑
none
AuthLogCallback
ServerConfig.NoClientAuthfalse
server.gofailureMsgnil
config.PublickeyCallbacknilfailureMsg
但 Open-SSH 客户端收到后就不再尝试了,会中断连接:
io.EOF
publickeygolang.org/x/crypto/ssh
对于 password 认证
Open-SSH 会
PasswordCallbacknonepasswordpublickey
publickeypassword
Open-SSHpassword
123456passwordpayload6126ascii
PublickKeyCallback
fmt.Println
none
publickeypayload