Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

SSH_AUTH_METHOD_PASSWORD does not seem to be working #61

Open
bschulth opened this issue Mar 7, 2023 · 0 comments
Open

SSH_AUTH_METHOD_PASSWORD does not seem to be working #61

bschulth opened this issue Mar 7, 2023 · 0 comments

Comments

@bschulth
Copy link

bschulth commented Mar 7, 2023

/* authenticate client */
static void auth_or_disconnect(ssh_session ssh, ssh_key privkey, SEXP rpass, const char *user){
  if(ssh_userauth_none(ssh, NULL) == SSH_AUTH_SUCCESS)
    return;
  int method = ssh_userauth_list(ssh, NULL);
  if (method & SSH_AUTH_METHOD_PUBLICKEY){
    if(privkey != NULL && ssh_userauth_publickey(ssh, NULL, privkey) == SSH_AUTH_SUCCESS)
      return;
    // ssh_userauth_publickey_auto() tries both ssh-agent and standard keys in ~/.ssh
    // it also automatically picks up SSH_ASKPASS env var set by 'askpass' package
    if(privkey == NULL && ssh_userauth_publickey_auto(ssh, NULL, NULL) == SSH_AUTH_SUCCESS)
      return;
  }
  if (method & SSH_AUTH_METHOD_INTERACTIVE && auth_interactive(ssh, rpass, user) == SSH_AUTH_SUCCESS)
    return;
  if (method & SSH_AUTH_METHOD_PASSWORD && auth_password(ssh, rpass, user) == SSH_AUTH_SUCCESS)
    return;
  ssh_disconnect(ssh);
  Rf_errorcall(R_NilValue, "Authentication with ssh server failed");
}
  • To have a retry loop, it works on second attempt. Not sure if this is a timeout issue or not waiting for a socket response.
/* authenticate client */
static void auth_or_disconnect(ssh_session ssh, ssh_key privkey, SEXP rpass, const char *user){
  if(ssh_userauth_none(ssh, NULL) == SSH_AUTH_SUCCESS)
    return;
  int method = ssh_userauth_list(ssh, NULL);
  if (method & SSH_AUTH_METHOD_PUBLICKEY){
    if(privkey != NULL && ssh_userauth_publickey(ssh, NULL, privkey) == SSH_AUTH_SUCCESS)
      return;
    // ssh_userauth_publickey_auto() tries both ssh-agent and standard keys in ~/.ssh
    // it also automatically picks up SSH_ASKPASS env var set by 'askpass' package
    if(privkey == NULL && ssh_userauth_publickey_auto(ssh, NULL, NULL) == SSH_AUTH_SUCCESS)
      return;
  }
  if (method & SSH_AUTH_METHOD_INTERACTIVE && auth_interactive(ssh, rpass, user) == SSH_AUTH_SUCCESS)
    return;
  // CHANGE START+++++++++++++++++++++++++++++++++++++
  if (method & SSH_AUTH_METHOD_PASSWORD) {
    int tries;
    int rc;
    rc = SSH_AUTH_AGAIN;
    while (rc != SSH_AUTH_SUCCESS) {
      tries += 1;
      REprintf("\nTrying password...via auth_password...attempt %i\n", tries);
      rc = auth_password(ssh, rpass, user);
      REprintf("   rc = %i\n", rc);
      if (rc == SSH_AUTH_SUCCESS) {
        return;
      }
      if (tries > 5) {
        break;
      }
    }
  }
  // CHANGE END+++++++++++++++++++++++++++++++++++++
  ssh_disconnect(ssh);
  Rf_errorcall(R_NilValue, "Authentication with ssh server failed");
}
  • Example output from my tweaked code:
ssh_userauth_publickey_auto: Private key /home/bschulth/.ssh/identity doesn't exist.
ssh_userauth_publickey_auto: Tried every public key, none matched

Trying password...via auth_password...attempt 1
ssh_socket_unbuffered_write: Enabling POLLOUT for socket
packet_send2: packet: wrote [len=76,padding=19,comp=56,payload=56]
ssh_socket_pollcallback: Poll callback on socket 29 (POLLOUT ), out buffer 0
ssh_socket_pollcallback: sending control flow event
ssh_packet_socket_controlflow_callback: sending channel_write_wontblock callback
   rc = 1

Trying password...via auth_password...attempt 2
ssh_socket_pollcallback: Poll callback on socket 29 (POLLIN ), out buffer 0
ssh_packet_socket_callback: packet: read type 52 [len=12,padding=10,comp=1,payload=1]
ssh_packet_process: Dispatching handler for packet type 52
ssh_packet_userauth_success: Authentication successful
ssh_packet_userauth_success: Received SSH_USERAUTH_SUCCESS
   rc = 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant