dockerホストからコンテナに直接sshしたい場合、コネクションが一瞬で切れることがありました。
1 2 3 4 5 |
[root@docker-host ~]# ssh localhost -p 200xx root@localhost's password: Last login: Wed Nov 2 11:32:21 2016 from xxxxxxxx Connection to localhost closed. [root@docker-host ~]# |
これは笑える。
強制遮断みたいな…w
もちろん他のサーバからdockerホストIP -p 200xxxとやっても遮断されます。
sshd.confが怪しいと思いきや…..
■原因は!?
PAM
だった。。
そもそもLinuxはユーザー認証のためにPAM(Pluggable Authentication Modules)
というモジュールが用意されていて、
プログラムに認証モジュールをプラグインする形で制御を行ってます。
以下のように。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
[root@8xxxxxxxxx /etc/pam.d]# ll total 76 -rw-r--r-- 1 root root 192 May 10 22:58 chfn -rw-r--r-- 1 root root 192 May 10 22:58 chsh -rw-r--r-- 1 root root 232 May 10 23:18 config-util -rw-r--r-- 1 root root 659 May 10 23:18 fingerprint-auth -rw-r--r-- 1 root root 728 May 10 22:58 login -rw-r--r-- 1 root root 172 May 10 22:57 newrole -rw-r--r-- 1 root root 154 May 10 23:18 other -rw-r--r-- 1 root root 146 Nov 23 2015 passwd -rw-r--r-- 1 root root 692 May 10 23:18 password-auth -rw-r--r-- 1 root root 613 May 10 22:58 remote -rw-r--r-- 1 root root 167 May 10 22:57 run_init -rw-r--r-- 1 root root 143 Apr 12 2016 runuser -rw-r--r-- 1 root root 105 Apr 12 2016 runuser-l -rw-r--r-- 1 root root 772 May 10 23:18 smartcard-auth -rw-r--r-- 1 root root 616 Nov 2 11:39 sshd -rw-r--r-- 1 root root 341 May 12 04:52 ssh-keycat -rw-r--r-- 1 root root 487 Apr 12 2016 su -rw-r--r-- 1 root root 137 Apr 12 2016 su-l -rw-r--r-- 1 root root 692 May 10 23:18 system-auth |
dockerコンテナの場合は上記のsshdにあるものを
追記すればコネクションは切れることはなくなりました。
(ちなみにコンテナのOSはCentOS6です)
■対応方法
・session optional pam_selinux.soの追記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@8xxxxxxxxxx pam.d]# vim /etc/pam.d/sshd #%PAM-1.0 auth required pam_sepermit.so auth include password-auth account required pam_nologin.so account include password-auth password include password-auth # pam_selinux.so close should be the first session rule session required pam_selinux.so close session optional pam_selinux.so #これをぶち込む # pam_selinux.so open should only be followed by sessions to be executed in the user context session required pam_selinux.so open env_params session required pam_namespace.so session optional pam_keyinit.so force revoke session include password-auth |
・sshd再起動
1 2 3 |
[root@8xxxxxxxxxx pam.d]# /etc/init.d/sshd restart stopping sshd: [ OK ] starting sshd: [ OK ] |
■確認
1 2 3 4 |
[root@docker-host ~]# ssh localhost -p 200xxxxx root@localhost's password: Last login: Wed Nov 2 12:09:38 2016 from xxxxxxxx [root@8xxxxxxxxx ~]# exit |
できたわ!
他のサーバからもport指定してログインできました。
■まとめ
参考:http://www.itmedia.co.jp/help/tips/linux/l0230.html
http://qiita.com/noya/items/5723ae55370478d60266
0件のコメント