fix: Search for ECDSA and Ed25519 keys in default SSH key locations (#26954)

Search for ECDSA and Ed25519 keys in default SSH key locations

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Eunbin SonandClaude Opus 4.8 authored and GitHub committed 2026-06-22 19:35:12 -06:00
1 parent 33e9ba24ca
commit f428d0626a
4 files changed
+35 -2

No files matched your search

@@ -75,7 +75,7 @@ public class PrivateKeyProvider {
/**
* Read keys from default keyFiles
*
* {@code .ssh/id_rsa}, {@code .ssh/id_dsa} and {@code .ssh/identity}.
* {@code .ssh/id_rsa}, {@code .ssh/id_ecdsa}, {@code .ssh/id_ed25519}, {@code .ssh/id_dsa} and {@code .ssh/identity}.
*
* @return true if some key was read successfully.
*/
@@ -83,7 +83,7 @@ public class PrivateKeyProvider {
final File home = new File(System.getProperty("user.home"));
boolean read = false;
for (String path : new String[] {".ssh/id_rsa", ".ssh/id_dsa", ".ssh/identity"}) {
for (String path : new String[] {".ssh/id_rsa", ".ssh/id_ecdsa", ".ssh/id_ed25519", ".ssh/id_dsa", ".ssh/identity"}) {
final File key = new File(home, path);
if (!key.exists()) continue;
@@ -142,4 +142,22 @@ class PrivateKeyProviderTest {
String password = "password";
assertThrows(IllegalArgumentException.class, () -> PrivateKeyProvider.loadKey(file, password));
}
/**
key command: ssh-keygen -t ecdsa -b 256 -N "" -C "" -f ecdsa
*/
@Test
void loadKeyECDSA() throws IOException, GeneralSecurityException {
File file = resourceAsFile("ecdsa");
assertKeyPairNotNull(file, null);
}
/**
key command: ssh-keygen -t ed25519 -N "" -C "" -f ed25519
*/
@Test
void loadKeyED25519() throws IOException, GeneralSecurityException {
File file = resourceAsFile("ed25519");
assertKeyPairNotNull(file, null);
}
}
+8
View File
@@ -0,0 +1,8 @@
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS
1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQSmYgxT7E9XwGYmr8cd++EvpaNX3e1/
T5w30hcO7xNk4n7xDsfZk8jOvg1ZbsfItBB5yjwRy7QTyXt/2ankp/E7AAAAoG6/A51uvw
OdAAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBKZiDFPsT1fAZiav
xx374S+lo1fd7X9PnDfSFw7vE2TifvEOx9mTyM6+DVlux8i0EHnKPBHLtBPJe3/ZqeSn8T
sAAAAhAJgBcc/Ez07nhpmLlsHhySD5zFeW/mHizkk/CIrvjkqSAAAAAAECAwQFBgc=
-----END OPENSSH PRIVATE KEY-----
@@ -0,0 +1,7 @@
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACD6KfM1gIePqB5IPHvD0vjniUUYE6hb6c6GsxVrPZg4ngAAAIiLNylbizcp
WwAAAAtzc2gtZWQyNTUxOQAAACD6KfM1gIePqB5IPHvD0vjniUUYE6hb6c6GsxVrPZg4ng
AAAEAA/Q+bSWkxT9WZacetaaN/KBJvrDRlHOuxKQghG49hKvop8zWAh4+oHkg8e8PS+OeJ
RRgTqFvpzoazFWs9mDieAAAAAAECAwQF
-----END OPENSSH PRIVATE KEY-----