Error: A public key corresponding to the supplied private key was not accepted by the server or the user name is incorrect.

0
Hi, I have generated Public Key Private Key combination, and have transferred Public Key to the Server whereas I am saving Private Key on my local Machine for now, but once this procedure is done I want to check whether I as a same user is getting access to my account using the Key-based Authentication System and it fails. 1. Generating Keys: ---------------------- public SSHKeyModel GenerateKeys(SSHKeyModel objSshKeyModel) { //1. Setting up details. objSshKeyModel.KeySize = 2048; SecureShellHostKeyAlgorithm secureShellHostKeyAlgorithm = SecureShellHostKeyAlgorithm.RSA; objSshKeyModel.PrivateKeyAlgorithm = "RSA"; string publicKeyAlgorithm = string.Empty; switch (secureShellHostKeyAlgorithm) { case SecureShellHostKeyAlgorithm.RSA: publicKeyAlgorithm = "ssh-rsa"; break; case SecureShellHostKeyAlgorithm.DSS: publicKeyAlgorithm = "ssh-dss"; break; default: throw new ApplicationException("Unsupported algorithm."); } objSshKeyModel.PublicKeyAlgorithm = publicKeyAlgorithm; //1. Generating Private Key. var _privateKey = SecureShellPrivateKey.Create(secureShellHostKeyAlgorithm, objSshKeyModel.KeySize); objSshKeyModel._PrivateKey = _privateKey.GetPrivateKey();//byte[] objSshKeyModel.PrivateKey = Convert.ToBase64String(objSshKeyModel._PrivateKey); //string MemoryStream streamOutput = new MemoryStream(); _privateKey.Save(streamOutput, objSshKeyModel.Passphrase, "putty"); streamOutput.Position = 0; objSshKeyModel.PrivateKey_ = new StreamReader(streamOutput);//StreamOutput objSshKeyModel.PrivateKeyPhysicalLocation = @"T:\Kaushal\Component_privateKey.ppk"; _privateKey.Save(objSshKeyModel.PrivateKeyPhysicalLocation, objSshKeyModel.Passphrase, "putty"); //Location based. SecureShellPrivateKey objSecureShellPrivateKey = new SecureShellPrivateKey(objSshKeyModel.PrivateKeyPhysicalLocation, objSshKeyModel.Passphrase); //2. Getting Public Key. objSshKeyModel._PublicKey = _privateKey.GetPublicKey();//byte[] objSshKeyModel.PublicKey = objSshKeyModel.PublicKeyAlgorithm " " Convert.ToBase64String(objSshKeyModel._PublicKey) " " objSecureShellPrivateKey.Comment;//String streamOutput = new MemoryStream(); _privateKey.SavePublicKey(streamOutput); streamOutput.Position = 0; objSshKeyModel.PublicKey_ = new StreamReader(streamOutput);//stream objSshKeyModel.PublicKeyPhysicalLocation = @"T:\Kaushal\Component_publicKey.pub"; _privateKey.SavePublicKey(objSshKeyModel.PublicKeyPhysicalLocation);//Location Based. //3. Getting Fingerprint objSshKeyModel.Fingerprint = _privateKey.Fingerprint.ToString(); return objSshKeyModel; } ---------------------- 2. Transferring Keys : (Please do not worry about the functions used internally.) ---------------------- public bool TransferPublicKey(SSHKeyModel objSshKeyModel) { bool transferSuccess = false; //1. Connect to Server. SshClient objSshClient = new SshClient(); objSshClient.Connect(objSshKeyModel.IpAddress, objSshKeyModel.Port); //2. Check whether server was connected. if (objSshClient.IsConnected) { //2.1 Authenticating User, via username and password. objSshClient.Authenticate(objSshKeyModel.UserName, objSshKeyModel.Password); if (objSshClient.IsAuthenticated) { //User is Authenticated. var command = string.Empty; //1. Getting into the User Directory. command = @"cd /home/" objSshKeyModel.UserName ""; var recievedData = ExecuteCommand(objSshClient: objSshClient, command: command, objSshKeyModel: objSshKeyModel); //2. Setting permission to the .ssh folder. if (string.IsNullOrEmpty(recievedData.Trim())) { //Command executed Successfully. chmod 700 /home/test1/.ssh command = @"chmod 700 /home/" objSshKeyModel.UserName "/.ssh"; recievedData = ExecuteCommand(objSshClient: objSshClient, command: command, objSshKeyModel: objSshKeyModel); if (string.IsNullOrEmpty(recievedData.Trim())) { //Command Executed Successfully. chmod 644 /home/test1/.ssh/authorized_keys command = @"chmod 644 /home/" objSshKeyModel.UserName "/.ssh/authorized_keys"; recievedData = ExecuteCommand(objSshClient: objSshClient, command: command, objSshKeyModel: objSshKeyModel); if (string.IsNullOrEmpty(recievedData.Trim())) { //Command Executed Successfully. //3. Setting permission to the authorized Key file. command = @"cd /home/" objSshKeyModel.UserName "/.ssh"; //2.2 Check whether Location-To-Be-Public-Key-Transferred exists. recievedData = ExecuteCommand(objSshClient: objSshClient, command: command, objSshKeyModel: objSshKeyModel); if (string.IsNullOrEmpty(recievedData.Trim())) { var permission = true; if (recievedData.Contains("Permission denied")) permission = false; if (permission) { //Permission was Granted. //#TODO: Remove this Command. Clearing the Contents of the File. command = @"echo '' > /home/" objSshKeyModel.UserName "/.ssh/authorized_keys"; var strRecievedData = ExecuteCommand(objSshClient: objSshClient, command: command, objSshKeyModel: objSshKeyModel); //2.2.1 strRecievedData = string.Empty; command = @"echo '" objSshKeyModel.PublicKey "' | " "cat >> /home/" objSshKeyModel.UserName "/.ssh/authorized_keys"; strRecievedData = ExecuteCommand(objSshClient: objSshClient, command: command, objSshKeyModel: objSshKeyModel); transferSuccess = (string.IsNullOrEmpty(recievedData.Trim()) || recievedData.Trim().Contains("''")) ? true : false; } else { //Permission was not set for the Location to be accessed. } } } } } } else { //User is not Authenticated. } } objSshClient.Disconnect(); return transferSuccess; } ---------------------- 3. Login Via Private Key: ---------------------- public bool ConnectWithKeys(SSHKeyModel objSshKeyModel) { var userAuthenticated = false; try { //Step 1: Authenticating via SSHClient. SshClient objSshClient = new SshClient(); objSshClient.Connect(objSshKeyModel.IpAddress, objSshKeyModel.Port); if (objSshClient.IsConnected) { SecureShellPrivateKey objSecureShellPrivateKey = new SecureShellPrivateKey(objSshKeyModel.PrivateKeyPhysicalLocation, objSshKeyModel.Passphrase);// objSshKeyModel._PrivateKey);//@"D:\id_rsa.ppk" objSshClient.Authenticate(objSshKeyModel.UserName, objSecureShellPrivateKey); userAuthenticated = (objSshClient.IsAuthenticated) ? true : false; } } catch (SecureShellException ex) { File.AppendAllText(@"D:\Log.txt", " Exception Occured : Stack Trace: " ex.StackTrace " "); } return userAuthenticated; } ---------------------- Error at Line : objSshClient.Authenticate(objSshKeyModel.UserName, objSecureShellPrivateKey); Error Details: Message: A public key corresponding to the supplied private key was not accepted by the server or the user name is incorrect. ProtocolCode: 13 ProtocolMessage: AuthenticationCancelledByUser Source: ComponentPro.Network Status: OperationFailed Could you please help me identify/verify whether or not the key formats generated are correct? Also please let me know if anything placed in above code is not correct?
 
asked 1/24/2018 3:56:18 PM
add a comment

1 Answers

0
Please let us know more about that SSH server: name, version, etc.
edited 1/27/2018 1:48:52 AM
answered 1/25/2018 9:07:08 AM
  Please find below details of server and user prompt [Test1@lnxrh5_arconsrv ~]$ uname -a Linux lnxrh5_arconsrv 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux ARCON Support 1/30/2018 12:20:20 PM
  [Test1@lnxrh5_arconsrv ~]$ uname -a Linux lnxrh5_arconsrv 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:54 EDT 2009 i686 i686 i386 GNU/Linux ARCON Support 1/30/2018 12:20:44 PM
  Can you also provide me samples of Public-Private Keys which are supposed to be used or transferred on server? So that I can verify, whether there is any change in the key format? ARCON Support 1/31/2018 3:41:37 PM
  Was this ever resolved? If so what was the solution? We are seeing a similar issue trying to implement SFTP Public Key Authentication. enjc 11/21/2018 4:20:51 PM
add a comment

Your Answer

Not the answer you're looking for? Browse other questions tagged ultimate terminal emulation or ask your own question.