Ubuntuでsshの認証しようとした時、結構詰まったのでそのメモ書き
参考
OSバージョン:ubuntu16.04LTS
sshに使うやつ:ssh-ldap-pubkey
とりあえずやりたかったこと
- 踏み台サーバーからクライアントに対してsshをかける
- 認証の際にLDAPサーバーの公開鍵を参照してログイン
- クライアント側には秘密鍵も公開鍵も置かない状態になっていること
やり方
クライアントサーバーに必要なものを一括インストール
サーバー
apt install slapd libnss-ldap libpam-ldap nslcd
クライアント
apt install libnss-ldap libpam-ldap nslcd
パスワードとかは任意のものを使用。
ldap://はLDAPサーバーのIPを入れてます(基本はドメインだと思う)
ついでに初期設定で聞かれるLDAPのドメインとかはそのサーバーのドメインをdc=ドメイン名で設定
例:)
xxx.example.comの場合
dc=example,dc=com見たな感じ
adminの設定もdcはさっき入力したやつを入力
あとはデフォルト値にしたがってはいはいと進めていきます。
sshスキーマを作成してデータベースに入れる
CentOSだとデフォルトでスキーマとか入っているらしいのですが、Ubuntuはその辺適当みたいで、むしろ自分で作れって言われました。
デフォルトだとsshのObjactClassがないみたいなのでldifファイルを作成して食べさせます。
このソースをviでコピペして作成する。
↓これ
openssh-lpk.schema
vi openssh-lpk.ldif
そんで管理者権限でさっき作ったやつをしれっと入れます。
ldapadd -x -W -D cn=admin,dc=example,dc=com -H ldap:/// -f openssh-lpk.ldif
これでスキーマがスコンと入れは成功
ssh-ldap-pubkeyのインストール
あとは最近ssh-ldap-pubkeyなるものが使えるようになったみたいなのでそれをクライアントとサーバー両方にインストール
Pythonで書かれているらしくpipをあらかじめインストールしてから使ってください。
sudo pip install ssh-ldap-pubkey
あと、ライブラリが足りないみたいなのでこれも追加してインストール
sudo apt-get install libsasl2-dev python-dev libldap2-dev libssl-dev
これでssh-ldap-pubkeyが使えるのでログインしたいLDAPユーザーのホームディレクトリに公開鍵と秘密鍵があることを確認したらLDAPデータベースに公開鍵を以下のコマンドで入れます。
ssh-ldap-pubkey add ~/.ssh/id_rsa.pub
admin権限で入れろよと怒られた場合はadminをバインドして入れましょう
ssh-ldap-pubkey add -D cn=admin,dc=example,dc=com -u demouser ~/.ssh/id_rsa.pub
クライアント側のsshdの設定の変更
このままだとクライアント側が普通のsshの認証しかしないので/etc/ssh/sshd_configの設定をviで編集。
vi /etc/ssh.sshd_config
認証する際にssh-ldap-pubkeyを使うように追記します。
その際にはパスワード認証はオフにしておくといいかも
AuthorizedKeysCommand /usr/bin/local/ssh-ldap-pubkey-wrapper
AuthorizedKeysCommandUser nobody
最後にsshdの再起動して反映させれば完了です。
systemctl restart sshd.service
あとはLDAPに公開鍵を登録したユーザーでsshできれば完成
参考URL
ubuntu OpenLDAP
jirutka/ssh-ldap-pubkey
Server world LDAPサーバーの設定