事象
LDAP認証を設定してログインを実施したが「Permission denied (publickey,gssapi-keyex,gssapi-with-mic).」でログインできない
$ ssh user_name user_name@***.***.***.***: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
ami
ami-0148288598227344a #amzn2-ami-hvm-2.0.20181114-x86_64-ebs
調査
sshのデバックログ
$ ssh user_name -vvv (省略) 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,gssapi-keyex,gssapi-with-mic debug1: Trying private key: /Users/user_name/.ssh/id_dsa debug3: no such identity: /Users/user_name/.ssh/id_dsa: No such file or directory debug1: Trying private key: /Users/user_name/.ssh/id_ecdsa debug3: no such identity: /Users/user_name/.ssh/id_ecdsa: No such file or directory debug1: Trying private key: /Users/user_name/.ssh/id_ed25519 debug3: no such identity: /Users/user_name/.ssh/id_ed25519: No such file or directory debug1: Trying private key: /Users/user_name/.ssh/id_xmss debug3: no such identity: /Users/user_name/.ssh/id_xmss: No such file or directory debug2: we did not send a packet, disable method debug1: No more authentication methods to try. user_name@***.***.***.***: Permission denied (publickey,gssapi-keyex,gssapi-with-mic).
dsaの鍵探してるけど、rsaで鍵を作成していたので、ローカルにはdsa関連ファイルはない。
sshd_configに設定したAuthorizedKeysCommandを確認
# grep AuthorizedKeysCommand /etc/ssh/sshd_config AuthorizedKeysCommand /usr/bin/timeout 5s /opt/aws/bin/curl_authorized_keys %u %f AuthorizedKeysCommandUser ec2-instance-connect AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper ←シェルで追記 AuthorizedKeysCommandUser nobody ←シェルで追記
追記したが、デフォルトの設定が存在した。
/opt/aws/bin/curl_authorized_keysは何?
Amazon Linux 2 – 2018 年 10 月 31 日更新
OpenSSH デーモン設定ファイル /etc/ssh/sshd_config の更新
OpenSSH デーモン設定ファイル /etc/ssh/sshd_config は更新されました。AuthorizedKeysCommand の値はカスタマイズされたスクリプト /opt/aws/bin/curl_authorized_keys を指定するように設定されており、SSH 接続処理中に EC2 インスタンスのメタデータから SSH 公開キーを読み込む機能を近日サポート開始する予定です。
対応
元の設定を無効化
$ grep AuthorizedKeysCommand /etc/ssh/sshd_config #AuthorizedKeysCommand /usr/bin/timeout 5s /opt/aws/bin/curl_authorized_keys %u %f #AuthorizedKeysCommandUser ec2-instance-connect AuthorizedKeysCommand /usr/libexec/openssh/ssh-ldap-wrapper AuthorizedKeysCommandUser nobody
無事ログインできた
$ ssh user_name Last login: Tue Mar 26 07:09:37 2019 from ***************.ap-northeast-1.compute.internal __| __|_ ) _| ( / Amazon Linux 2 AMI ___|\___|___| https://aws.amazon.com/amazon-linux-2/ 17 package(s) needed for security, out of 28 available Run "sudo yum update" to apply all updates.
リリース以前のAmazonLinux2の設定は確認できてないけど、ansibleやterraformのuser_data
など使って、自動で設定してた場合などは気づかないかも。
メモ
インスタンス作成直後のsshd_config
$ sudo egrep -v '^#|^$' /etc/ssh/sshd_config HostKey /etc/ssh/ssh_host_rsa_key HostKey /etc/ssh/ssh_host_ecdsa_key HostKey /etc/ssh/ssh_host_ed25519_key SyslogFacility AUTHPRIV AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no ChallengeResponseAuthentication no GSSAPIAuthentication yes GSSAPICleanupCredentials no UsePAM yes X11Forwarding yes AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE AcceptEnv XMODIFIERS Subsystem sftp /usr/libexec/openssh/sftp-server AuthorizedKeysCommand /usr/bin/timeout 5s /opt/aws/bin/curl_authorized_keys %u %f AuthorizedKeysCommandUser ec2-instance-connect