dehio3’s diary

仕事、生活、趣味のメモ

amazonlinux2でssh認証をLDAPに変更したがログインに失敗する

事象

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 リリースノート

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