Greetings, The enclosed patch to ssh-add.c (from OpenSSH 2.5.2p2) changes the behavior of ssh-add when called with no arguments. Instead of defaulting to ~/.ssh/identity, it checks for the existence of, and processes if it exists, each of the following (from pathnames.h): _PATH_SSH_CLIENT_IDENTITY ~/.ssh/identity _PATH_SSH_CLIENT_ID_DSA ~/.ssh/id_dsa _PATH_SSH_CLIENT_ID_RSA ~/.ssh/id_rsa I understand the arguments against this sort of thing; I even agree that the clueful user should explicitly specify the keys. However, the defaults are already there. ssh-keygen and ssh default to these, and it is confusing that ssh-add does not. Thanks to all for your efforts; OpenSSH is a terrific product. ^E -- Ed Santiago Toolsmith esm at pobox.com -------------- next part -------------- --- ssh-add.c.ORIG Tue Apr 3 12:51:55 2001 +++ ssh-add.c Tue Apr 3 18:32:45 2001 @@ -287,6 +287,11 @@ add_file(ac, argv[i]); } if (no_files) { + char *ident_files[] = { _PATH_SSH_CLIENT_IDENTITY, + _PATH_SSH_CLIENT_ID_DSA, + _PATH_SSH_CLIENT_ID_RSA }; + struct stat st; + pw = getpwuid(getuid()); if (!pw) { fprintf(stderr, "No user found with uid %u\n", @@ -294,11 +299,17 @@ ssh_close_authentication_connection(ac); exit(1); } - snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, _PATH_SSH_CLIENT_IDENTITY); - if (deleting) - delete_file(ac, buf); - else - add_file(ac, buf); + + /* Default (no args): try to load all "standard" ID files */ + for (i=0; i < sizeof(ident_files) / sizeof(ident_files[0]); i++) { + snprintf(buf, sizeof buf, "%s/%s", pw->pw_dir, ident_files[i]); + if (stat(buf, &st) == 0) { + if (deleting) + delete_file(ac, buf); + else + add_file(ac, buf); + } + } } ssh_close_authentication_connection(ac); exit(0);