in pkg/sshd/ssh.go [60:119]
func InitFromSecret(sshCM map[string][]byte, ns string) {
var signer gossh.Signer
var r string
sshCA := sshCM["SSHCA_ADDR"]
var authKeys []gossh.PublicKey
for k, v := range sshCM {
if strings.HasPrefix(k, "authorized_key_") {
pubk1, _, _, _, err := gossh.ParseAuthorizedKey(v)
if err != nil {
log.Println("SSH_DEBUG: invalid ", k, err)
} else {
authKeys = append(authKeys, pubk1)
log.Println("Adding authorized key", k, string(v))
}
}
}
extra := os.Getenv("SSH_AUTH")
if extra != "" {
pubk1, _, _, _, err := gossh.ParseAuthorizedKey([]byte(extra))
if err != nil {
log.Println("SSH_DEBUG: invalid SSH_AUTH", err)
} else {
authKeys = append(authKeys, pubk1)
}
}
if len(authKeys) == 0 && sshCA == nil {
// No debug config, skip creating SSHD
return
}
// load private key and cert from secret, if present
ek := sshCM["id_ecdsa"]
if ek != nil {
pk, err := gossh.ParsePrivateKey(ek)
if err != nil {
log.Println("Failed to parse key ", err)
}
signer = pk
}
if signer == nil {
privk1, _ := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
signer, _ = gossh.NewSignerFromKey(privk1)
}
ssht, err := NewSSHTransport(signer, "", ns, r)
if err != nil {
log.Println("SSH debug init failed", err)
return
}
if len(authKeys) != 0 {
ssht.AddAuthorizedKeys(authKeys)
}
go ssht.Start()
}