Issue
I'm wrestling with SSH keys here. I'm trying to SSH into my instance on EC2 so I created
new key pair and dowloaded as well. Moved the pem
file into ~/.ssh/key.pem
and ran:
sudo chmod 400 key.pem
as required by AWS.
and to test it:
ssh -i "~/.ssh/key.pem" [email protected]
x & y are replaced by real values
output: Permission denied (public key)
What am I doing wrong ? This is pretty straightforward operation. Thank you.
-vvv output:
OpenSSH_8.2p1 Ubuntu-4ubuntu0.1, OpenSSL 1.1.1f 31 Mar 2020
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug2: resolving "ec2-3-x-y-228.eu-west-2.compute.amazonaws.com" port 22
debug2: ssh_connect_direct
debug1: Connecting to ec2-3-x-y-228.eu-west-2.compute.amazonaws.com [3.9.13.228] port 22.
debug1: Connection established.
debug1: identity file /home/mark/.ssh/key.pem type -1
debug1: identity file /home/mark/.ssh/key.pem-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.1
debug1: Remote protocol version 2.0, remote software version OpenSSH_7.2p2 Ubuntu-4ubuntu2.8
debug1: match: OpenSSH_7.2p2 Ubuntu-4ubuntu2.8 pat OpenSSH_7.0*,OpenSSH_7.1*,OpenSSH_7.2*,OpenSSH_7.3*,OpenSSH_7.4*,OpenSSH_7.5*,OpenSSH_7.6*,OpenSSH_7.7* compat 0x04000002
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to ec2-3-x-y-228.eu-west-2.compute.amazonaws.com:22 as 'ubuntu'
debug3: hostkeys_foreach: reading file "/home/mark/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/mark/.ssh/known_hosts:5
debug3: load_hostkeys: loaded 1 keys from ec2-3-9-13-228.eu-west-2.compute.amazonaws.com
debug3: order_hostkeyalgs: prefer hostkeyalgs: [email protected],[email protected],[email protected],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: compression ctos: none,[email protected]
debug2: compression stoc: none,[email protected]
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: [email protected]
debug1: kex: host key algorithm: ecdsa-sha2-nistp256
debug1: kex: server->client cipher: [email protected] MAC: <implicit> compression: none
debug1: kex: client->server cipher: [email protected] 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:r/f7fqemYF3CfPl9S+8wDMN1UtsqrtYRaX1tkWaEwlk
debug3: hostkeys_foreach: reading file "/home/mark/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/mark/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from ec2-3-9-13-228.eu-west-2.compute.amazonaws.com
debug3: hostkeys_foreach: reading file "/home/mark/.ssh/known_hosts"
debug3: record_hostkey: found key type ECDSA in file /home/mark/.ssh/known_hosts:2
debug3: load_hostkeys: loaded 1 keys from 3.9.13.228
debug1: Host 'ec2-3-x-y-228.eu-west-2.compute.amazonaws.com' is known and matches the ECDSA host key.
debug1: Found key in /home/mark/.ssh/known_hosts:1
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey out 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 in after 134217728 blocks
debug1: Will attempt key: desktop ED25519 SHA256:inJuopb8NVP9ctfF1iGEWI3jz/dIvg9KtFJ5PIZA1CA agent
debug1: Will attempt key: desktop ED25519 SHA256:RpPez0H8w3OHcsJhQl9u/X/RQtokQqGBM9Uwyq/0uqA agent
debug1: Will attempt key: /home/mark/.ssh/key.pem explicit
debug2: pubkey_prepare: done
debug3: send packet: type 5
debug3: receive packet: type 7
debug1: SSH2_MSG_EXT_INFO received
debug1: kex_input_ext_info: server-sig-algs=<rsa-sha2-256,rsa-sha2-512>
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 gssapi-with-mic,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: desktop ED25519 SHA256:inJuopb8NVP9ctfF1iGEWI3jz/dIvg9KtFJ5PIZA1CA agent
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
debug1: Offering public key: desktop ED25519 SHA256:RpPez0H8w3OHcsJhQl9u/X/RQtokQqGBM9Uwyq/0uqA agent
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
debug1: Trying private key: /home/mark/.ssh/key.pem
debug3: sign_and_send_pubkey: RSA SHA256:+cjeAT0FFDXzcLAEh+QsN3UXgKdN/RVey39Lzuj1Q60
debug3: sign_and_send_pubkey: signing using rsa-sha2-512 SHA256:+cjeAT0FFDXzcLAEh+QsN3UXgKdN/RVey39Lzuj1Q60
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.
[email protected]: Permission denied (publickey).
Solution
When using SSH to connect to a remote system, the steps are:
- Your computer uses the private key to authenticate
- The remote computer looks in the
/usr/ubuntu/.ssh/authorized_keys
file and tries to find a matching public key - If the keys match, the SSH session will be established
Therefore, it appears that the public half of the keypair has not been inserted into the /usr/ubuntu/.ssh/authorized_keys
file on the remote computer. This is normally done automatically for you when a new instance is launched. However, if you want to use a different keypair after the instance has been launched, then you are responsible for adding that keypair to the authorized_keys
file on the remote computer.
To do this, you either need an existing login to the remote computer (using an existing keypair) or you could copy the keypair by stopping the instance, moving the boot disk to another instance, editing the file, then put the disk back and start the computer. See: Recovering lost AWS EC2 Key Pairs
Answered By - John Rotenstein