我想使用 libssh 登录远程设备,而不在我的代码中指定密码。我已经测试过密码验证,它工作正常。我尝试了许多 libssh 的密钥身份验证 API 组合,但它似乎不起作用。
对于密钥认证,我写了这个函数:
int vs_ssh_authenticate(vsBasestation_t *bs)
{
int auth = -1;
ssh_key pkey, privkey;
#ifdef KEY_AUTHENTICATION
char *password;
password="sample";
auth = ssh_userauth_password(bs->session,NULL,password);
if (auth==SSH_AUTH_ERROR)
{
fprintf(stderr,"Authentication with password failed: %s\n",ssh_get_error(bs->session));
return auth;
}
#else
if(ssh_pki_import_pubkey_file("~/.ssh/key.pub",&pkey) == SSH_OK)
{
if(ssh_pki_import_privkey_file("~/.ssh/key",NULL,
NULL,NULL,&privkey) == SSH_OK)
{
auth = ssh_userauth_publickey(bs->session, NULL, privkey);
}
}
#endif
return auth;
}
现在,如果客户端计算机的公钥存在于服务器的“authorized_keys”文件中,则此机制有效,否则服务器发送拒绝访问响应。我应该如何将客户端的公钥从这个程序复制到服务器?
谢谢。