examples: add public key auth for specific key
There was no example of using a specific key for authentication so I added one. Signed-off-by: Eric Bentley <ebentley66@gmail.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
Этот коммит содержится в:
родитель
db67fcbe88
Коммит
83d86ef6a5
@ -100,6 +100,39 @@ int authenticate_kbdint(ssh_session session, const char *password)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int auth_keyfile(ssh_session session, char* keyfile)
|
||||||
|
{
|
||||||
|
ssh_key key = NULL;
|
||||||
|
char pubkey[132] = {0}; // +".pub"
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
snprintf(pubkey, sizeof(pubkey), "%s.pub", keyfile);
|
||||||
|
|
||||||
|
rc = ssh_pki_import_pubkey_file( pubkey, &key);
|
||||||
|
|
||||||
|
if (rc != SSH_OK)
|
||||||
|
return SSH_AUTH_DENIED;
|
||||||
|
|
||||||
|
rc = ssh_userauth_try_publickey(session, NULL, key);
|
||||||
|
|
||||||
|
ssh_key_free(key);
|
||||||
|
|
||||||
|
if (rc!=SSH_AUTH_SUCCESS)
|
||||||
|
return SSH_AUTH_DENIED;
|
||||||
|
|
||||||
|
rc = ssh_pki_import_privkey_file(keyfile, NULL, NULL, NULL, &key);
|
||||||
|
|
||||||
|
if (rc != SSH_OK)
|
||||||
|
return SSH_AUTH_DENIED;
|
||||||
|
|
||||||
|
rc = ssh_userauth_publickey(session, NULL, key);
|
||||||
|
|
||||||
|
ssh_key_free(key);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static void error(ssh_session session)
|
static void error(ssh_session session)
|
||||||
{
|
{
|
||||||
fprintf(stderr,"Authentication failed: %s\n",ssh_get_error(session));
|
fprintf(stderr,"Authentication failed: %s\n",ssh_get_error(session));
|
||||||
@ -140,6 +173,35 @@ int authenticate_console(ssh_session session)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
{
|
||||||
|
char buffer[128] = {0};
|
||||||
|
char *p = NULL;
|
||||||
|
|
||||||
|
printf("Automatic pubkey failed. "
|
||||||
|
"Do you want to try a specific key? (y/n)\n");
|
||||||
|
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((buffer[0]=='Y') || (buffer[0]=='y')) {
|
||||||
|
printf("private key filename: ");
|
||||||
|
|
||||||
|
if (fgets(buffer, sizeof(buffer), stdin) == NULL) {
|
||||||
|
return SSH_AUTH_ERROR;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[sizeof(buffer) - 1] = '\0';
|
||||||
|
if ((p = strchr(buffer, '\n'))) {
|
||||||
|
*p = '\0';
|
||||||
|
}
|
||||||
|
|
||||||
|
rc = auth_keyfile(session, buffer);
|
||||||
|
|
||||||
|
if(rc == SSH_AUTH_SUCCESS) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fprintf(stderr, "failed with key\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Try to authenticate with keyboard interactive";
|
// Try to authenticate with keyboard interactive";
|
||||||
if (method & SSH_AUTH_METHOD_INTERACTIVE) {
|
if (method & SSH_AUTH_METHOD_INTERACTIVE) {
|
||||||
|
Загрузка…
Ссылка в новой задаче
Block a user