Permission denied (publickey) non-root user

November 20, 2018 5.7k views
Deployment Ubuntu 16.04

This has been an issue with me for months on digital ocean. Recently I was able to log in but when I disabled the password it stopped allowing my non-root users to SSH in.
I’ve since deleted the user and created a new one but all root-users cannot access the server. The only way to fix this has been to delete the droplet.

The only way I got SSH to work previously was to paste the public key into /.ssh/authorized_keys while logged in as the user. ssh-add -i ~/.ssh/my user@123.345 does not. The command to add the key comes back itself with a public key error.

I’ve also set the permissions to:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys

I’ve looked in /var/logs/auth.log but I can’t make sense of it. This is the verbose output when I try to SSH in using the -vvv flags

ssh -vvv portfoliouser
OpenSSH_7.6p1, LibreSSL 2.6.2
debug1: Reading configuration data /Users/ME/.ssh/config
debug1: /Users/ME/.ssh/config line 5: Applying options for portfoliouser
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 48: Applying options for *
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to 123.456.789 port 22.
debug1: Connection established.
debug1: identity file /Users/ME/.ssh/portfoliouser type 0
debug1: key_load_public: No such file or directory
debug1: identity file /Users/ME/.ssh/portfoliouser-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_7.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.6p1 Ubuntu-4
debug1: match: OpenSSH_7.6p1 Ubuntu-4 pat OpenSSH* compat 0x04000000
debug3: fd 5 is O_NONBLOCK
debug1: Authenticating to 123.456.789:22 as 'user1'
debug3: hostkeys_foreach: reading file "/Users/ME/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /Users/ME/.ssh/known_hosts:16
debug3: load_hostkeys: loaded 1 keys from 123.456.789
debug3: order_hostkeyalgs: prefer hostkeyalgs: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519-cert-v01@openssh.com,ssh-rsa-cert-v01@openssh.com,ssh-ed25519,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com,zlib
debug2: compression stoc: none,zlib@openssh.com,zlib
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1
debug2: host key algorithms: ssh-rsa,rsa-sha2-512,rsa-sha2-256,ecdsa-sha2-nistp256,ssh-ed25519
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com
debug2: compression stoc: none,zlib@openssh.com
debug2: languages ctos: 
debug2: languages stoc: 
debug2: first_kex_follows 0 
debug2: reserved 0 
debug1: kex: algorithm: curve25519-sha256
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug1: kex: client->server cipher: chacha20-poly1305@openssh.com MAC: <implicit> compression: none
debug3: send packet: type 30
debug1: expecting SSH2_MSG_KEX_ECDH_REPLY
debug3: receive packet: type 31
debug1: Server host key: ecdsa-sha2-nistp256 SHA256:O42otfF5pPyrdnqI7pdG8tPHzdf/PabLlR9WKTRUap8
debug3: hostkeys_foreach: reading file "/Users/ME/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /Users/ME/.ssh/known_hosts:16
debug3: load_hostkeys: loaded 1 keys from 123.456.789
debug1: Host '123.456.789' is known and matches the ECDSA host key.
debug1: Found key in /Users/ME/.ssh/known_hosts:16
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 134217728 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 134217728 blocks
debug2: key: /Users/ME/.ssh/portfoliouser (0x7f886f419d60), explicit
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<ssh-ed25519,ssh-rsa,rsa-sha2-256,rsa-sha2-512,ssh-dss,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521>
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug3: start over, passed a different list publickey
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug1: Offering public key: RSA SHA256:FQD3UTrY9KaH50is1xVDroEDmQHmA0OYtEGdEIzfcsQ /Users/ME/.ssh/portfoliouser
debug3: send_pubkey_test
debug3: send packet: type 50
debug2: we sent a publickey packet, wait for reply
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey
debug2: we did not send a packet, disable method
debug1: No more authentication methods to try.
user1@123.456.789: Permission denied (publickey).
1 comment
2 Answers

Hey friend,

I wasn’t able to fully follow the process of what you’ve been doing, so my recommendation is that we simplify this a bit. The thing about SSH keys is that it’s all relatively simple, and it’s only us humans who over complicate it at times. This is my recommendation:

1. Create a new droplet with the same OS
2. Copy /etc/ssh/sshd_config from the new server to the old. (Wipe out any customization you've made to SSH config)
3. Create new user, let's say "username"
4. Change to that user ("su username")
5. Generate SSH keys/directory ("ssh-keygen")
6. Open authorized_keys file ("nano ~/.ssh/authorized_keys")
7. Paste your public key into the file, it should take one single line.
8. Save file (control+o, enter, control+x)

If your SSH key still fails to log in as “username” in this example, your client (your computer) is not sending the private key or you used the wrong key. It can really be that simple, so generate new keys on your system and try again :)

Jarland

  • Hi Jarland,

    Thanks for trying to help!

    I destroyed the non-working droplet too quickly so I did not copy the old sshd_config to the new one. However, this where I am at:

    1. Created a new droplet with ubuntu. Added a password for root with passwd root since it always asks for one (not a login, but when inside ubuntu), even if one not set.
    2. Added new user, added password, and gave it sudo access using usermod -aG sudo myUser.
    3. Switched to user and created ~/.ssh/authorized_key
    4. Copied in the key.
    5. Tried to log onto server with `ssh ssh -i ~/.ssh/key-name user@123.456

    Up to here is successful, but it usually has been up until this point.

    • Problems begin: logging in as user always asks for a PW. Root does not
      In user’s shhd_config I have the following set, and still it asks or PW for non-root user at login.

    • PermitRootLogin yes

    • PubkeyAuthentication yes

    • PasswordAuthentication

    I’ve also tried to disable password inside ubunutu, when running commands and changing users, with passwd -d whoami but it never takes.

    Now here is where problems start: I want to disable PW and so I used this https://askubuntu.com/questions/281074/can-i-set-my-user-account-to-have-no-password
    I go sudo visudo and user ALL=(ALL) NOPASSWD:ALL and voila, my shh keys no longer work.

    So that is where I am at.

Have another answer? Share your knowledge.