Skip to content
This repository was archived by the owner on Mar 6, 2025. It is now read-only.

Commit dab882a

Browse files
authored
fix: fail early on invalid key types (#145)
* fix: fail early on invalid key types Signed-off-by: Carlos A Becker <[email protected]> * fix: dangling log Signed-off-by: Carlos A Becker <[email protected]>
1 parent 8ca44b7 commit dab882a

File tree

1 file changed

+17
-5
lines changed

1 file changed

+17
-5
lines changed

client/client.go

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -94,10 +94,14 @@ func NewClient(cfg *Config) (*Client, error) {
9494

9595
var pkam ssh.AuthMethod
9696
for i := 0; i < len(sshKeys); i++ {
97-
pkam, err = publicKeyAuthMethod(sshKeys[i])
97+
signer, err := parseKey(sshKeys[i])
9898
if err != nil && i == len(sshKeys)-1 {
9999
return nil, charm.ErrMissingSSHAuth
100100
}
101+
if err := checkKeyAlgo(signer); err != nil && i == len(sshKeys)-1 {
102+
return nil, err
103+
}
104+
pkam = ssh.PublicKeys(signer)
101105
}
102106
cc.authKeyPaths = sshKeys
103107

@@ -224,8 +228,6 @@ func (cfg *Config) KeygenType() keygen.KeyType {
224228
return keygen.Ed25519
225229
case "rsa":
226230
return keygen.RSA
227-
case "ecdsa":
228-
return keygen.ECDSA
229231
default:
230232
return keygen.Ed25519
231233
}
@@ -320,7 +322,17 @@ func (cc *Client) findAuthKeys(keyType string) (pathsToKeys []string, err error)
320322
return found, nil
321323
}
322324

323-
func publicKeyAuthMethod(kp string) (ssh.AuthMethod, error) {
325+
func checkKeyAlgo(signer ssh.Signer) error {
326+
ka := signer.PublicKey().Type()
327+
for _, a := range []string{"ssh-rsa", "ssh-ed25519"} {
328+
if a == ka {
329+
return nil
330+
}
331+
}
332+
return fmt.Errorf("Sorry, we don't support %s keys yet. Supported types are rsa and ed25519", algo(ka))
333+
}
334+
335+
func parseKey(kp string) (ssh.Signer, error) {
324336
keyPath, err := homedir.Expand(kp)
325337
if err != nil {
326338
return nil, err
@@ -333,5 +345,5 @@ func publicKeyAuthMethod(kp string) (ssh.AuthMethod, error) {
333345
if err != nil {
334346
return nil, err
335347
}
336-
return ssh.PublicKeys(signer), nil
348+
return signer, nil
337349
}

0 commit comments

Comments
 (0)