コンテナのこえ
Wakame-vdc ユーザの皆さん、磯野家の皆さん、こんにちは。これはオレオレ WakameVdc / OpenVNet Advent Calendar 2015 の12日目のエントリです。
11日目のエントリにて lxc のコンテナが起動できるようにすることができたので、本当はもう少しちゃんとしたパッチを書きたいところですが、その前に11日目のエントリで充分か否かを先に検証したいので、本日は起動したコンテナに接続できるかどうかを確認したいと思います。
起動したコンテナに早速 ssh で接続…11日目のエントリでは「ssh で接続するもいつまで待ってもログインプロンプトが返ってこない」という現象や「エンターキーを押す毎にプロンプトの表示がホストマシンのものとコンテナのものとがサイクリックに切り替わる」という不思議満点な状況でした。(動画にでも撮っておけばよかった…)
で今日の環境は手作業修正によるものではなく、パッチを当てた LiveDVD から起動してみましたが、やはり「ssh で接続するもいつまで待ってもログインプロンプトが返ってこない」という状況でした。
なのでまずは現状の確認を行ないます。まず、コンテナの lxc 設定ですが、以下のようになっています。
[root@host-133-130-109-122 wakame]# cat /var/lib/wakame-vdc/instances/i-kg0uuloj/lxc.conf
lxc.utsname = i-kg0uuloj
lxc.network.type = veth
lxc.network.link = br0
lxc.network.veth.pair = vif-3kd9fd4z
lxc.network.hwaddr = 52:54:00:c3:2f:4f
lxc.network.flags = up
lxc.tty = 4
lxc.pts = 1024
lxc.rootfs = /var/lib/wakame-vdc/instances/i-kg0uuloj/rootfs
lxc.rootfs.mount = /var/lib/wakame-vdc/instances/i-kg0uuloj/rootfs
lxc.mount.entry = proc /proc proc defaults 0 0
lxc.mount.entry = sysfs /sys sysfs defaults 0 0
#lxc.mount = /var/lib/wakame-vdc/instances/i-kg0uuloj/fstab
#lxc.cap.drop = mac_admin sys_boot
lxc.cgroup.devices.deny = a
# /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
# consoles
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 5:1 rwm
lxc.cgroup.devices.allow = c 4:0 rwm
lxc.cgroup.devices.allow = c 4:1 rwm
# /dev/{,u}random"
lxc.cgroup.devices.allow = c 1:9 rwm
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 136:* rwm
lxc.cgroup.devices.allow = c 5:2 rwm
# /dev/rtc
lxc.cgroup.devices.allow = c 254:0 rwm
# /dev/kvm
#lxc.cgroup.devices.allow = c 10:232 rwm
#lxc.cgroup.devices.allow = c 10:200 rwm
う〜ん、特に変な設定は見当たらないですね…。次にコンテナの内部を見てみます。
[root@host-133-130-109-122 wakame]# lxc-ls
i-kg0uuloj
[root@host-133-130-109-122 wakame]# lxc-attach --name=i-kg0uuloj
[root@kg0uuloj /]# ip a
4: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 52:54:00:c3:2f:4f brd ff:ff:ff:ff:ff:ff
inet 192.0.2.20/24 brd 192.0.2.255 scope global eth0
inet6 fe80::5054:ff:fec3:2f4f/64 scope link
valid_lft forever preferred_lft forever
6: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
[root@kg0uuloj /]# ps auxwww|grep ssh
root 407 0.0 0.0 66688 1220 ? Ss 01:59 0:00 /usr/sbin/sshd
root 540 0.0 0.0 94252 4296 ? Ss 02:02 0:00 sshd: root@pts/0
root 561 0.0 0.0 94252 4296 ? Ss 02:10 0:00 sshd: root@pts/1
root 716 0.0 0.0 107456 932 pts/8 S+ 12:47 0:00 grep ssh
[root@kg0uuloj /]# /etc/init.d/sshd status
openssh-daemon (pid 407) を実行中...
はい、ちゃんと NIC に IP が振られ、ssh もちゃんと起動しています。
[root@kg0uuloj /]# ls -al /home/
合計 12
drwxr-xr-x 3 root root 4096 4月 19 17:29 2015 .
dr-xr-xr-x 23 root root 4096 12月 10 01:59 2015 ..
drwx------ 2 wakame-vdc wakame-vdc 4096 4月 19 17:29 2015 wakame-vdc
# getent shadow wakame-vdc
wakame-vdc:$6$o0NRcBn2YU/D00L$ZfpDzmFviu/YNwJDgI/QNZuLdE.JibVMBEhIs45P2C/GQnZ71bnDofck8U.hk61CvqlgcZfg0vxFLLRes5Pw2/:16544:0:99999:7:::
[root@kg0uuloj /]# ls -al /home/wakame-vdc/
合計 20
drwx------ 2 wakame-vdc wakame-vdc 4096 4月 19 17:29 2015 .
drwxr-xr-x 3 root root 4096 4月 19 17:29 2015 ..
-rw-r--r-- 1 wakame-vdc wakame-vdc 18 10月 16 22:56 2014 .bash_logout
-rw-r--r-- 1 wakame-vdc wakame-vdc 176 10月 16 22:56 2014 .bash_profile
-rw-r--r-- 1 wakame-vdc wakame-vdc 134 4月 19 17:29 2015 .bashrc
wakame-vdc というユーザが作成されており、何らかのパスワードが設定されてはいますが、ssh の鍵は設定されていないようです。
[root@kg0uuloj /]# ls -al /root/
合計 32
dr-xr-x--- 3 root root 4096 12月 10 01:59 2015 .
dr-xr-xr-x 23 root root 4096 12月 10 01:59 2015 ..
-rw-r--r-- 1 root root 18 5月 20 19:45 2009 .bash_logout
-rw-r--r-- 1 root root 176 5月 20 19:45 2009 .bash_profile
-rw-r--r-- 1 root root 176 9月 23 12:59 2004 .bashrc
-rw-r--r-- 1 root root 100 9月 23 12:59 2004 .cshrc
drwx------ 2 root root 4096 12月 10 01:59 2015 .ssh
-rw-r--r-- 1 root root 129 12月 4 06:42 2004 .tcshrc
[root@kg0uuloj /]# ls -al /root/.ssh/
合計 12
drwx------ 2 root root 4096 12月 10 01:59 2015 .
dr-xr-x--- 3 root root 4096 12月 10 01:59 2015 ..
-rw------- 1 root root 396 12月 10 01:59 2015 authorized_keys
[root@kg0uuloj /]# cat /root/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDZhAOcHSe4aY8GwwLCJ4Et3qUBcyVPokFoCyCrtTZJVUU++B9554ahiVcrQCbfuDlaXV2ZCfIND+5N1UEk5umMoQG1aPBw9Nz9wspMpWiTKGOAm99yR9aZeNbUi8zAfyYnjrpuRUKCH1UPmh6EDaryFNDsxInmaZZ6701PgT++cZ3Vy/r1bmb93YvpV+hfaL/FmY3Cu8n+WJSoJQZ4eCMJ+4Pw/pkxjfuLUw3mFl40RVAlwlTuf1I4bB/m1mjlmirBEU6+CWLGYUNWDKaFBpJcGB6sXoQDS4FvlV92tUAEKIBWG5ma0EXBdJQBi1XxSCU2p7XMX8DhS7Gj/TSu7011 wakame-vdc.pem
一方で root ユーザには ssh 鍵が設定されていました。中身を見ると起動時に指定した LiveDVD のデモ用の ssh 鍵でした。
[root@kg0uuloj /]# grep -v ^# /etc/ssh/sshd_config |grep -v ^$
Protocol 2
SyslogFacility AUTHPRIV
PermitRootLogin yes
PasswordAuthentication no
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials yes
UsePAM 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
X11Forwarding yes
UseDNS no
Subsystem sftp /usr/libexec/openssh/sftp-server
sshd の設定を見ると、root ユーザのログインは許可されておりますが、PasswordAuthentication も ChallengeResponseAuthentication も no になっているため、既定で設定されている wakame-vdc にはログインできなさそうです。
[root@host-133-130-109-122 wakame]# ssh -l wakame-vdc 192.0.2.20
Permission denied (publickey).
ね、ほら。
では、root ユーザでログインしたときはコンテナにそもそもちゃんとアクセスできているのか…?ですが、/var/log/secure を見ると以下のようなログが残っていました。
Dec 10 15:39:23 kg0uuloj sshd[835]: Accepted publickey for root from 192.0.2.1 port 43501 ssh2
Dec 10 15:39:23 kg0uuloj sshd[835]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 10 15:39:23 kg0uuloj sshd[837]: error: ioctl(TIOCSCTTY): Operation not permitted
Dec 10 15:39:23 kg0uuloj sshd[837]: error: open /dev/tty failed - could not set controlling tty: No such file or directory
tty が無いって言ってますね…。そりゃぁログインができないわけです…。
[root@hongo0u5 /]# ls -al /dev/|grep tty
crw------- 1 root tty 136, 4 12月 12 20:21 2015 console
crw------- 1 root root 136, 0 12月 12 20:21 2015 tty1
crw------- 1 root root 136, 1 12月 12 20:21 2015 tty2
crw------- 1 root root 136, 2 12月 12 20:21 2015 tty3
crw------- 1 root root 136, 3 12月 12 20:21 2015 tty4
ちなみに Wakame-vdc と関係なく lxc-create -t centos で作成したコンテナの中身を見てみると…
[root@centos /]# ls -al /dev/|grep tty
crw-rw-rw- 1 root root 5, 0 12月 10 05:49 2015 tty
crw-rw-rw- 1 root root 4, 0 12月 10 05:49 2015 tty0
lrwxrwxrwx 1 root root 8 12月 10 05:50 2015 tty1 -> lxc/tty1
lrwxrwxrwx 1 root root 8 12月 10 05:50 2015 tty2 -> lxc/tty2
lrwxrwxrwx 1 root root 8 12月 10 05:50 2015 tty3 -> lxc/tty3
lrwxrwxrwx 1 root root 8 12月 10 05:50 2015 tty4 -> lxc/tty4
はい、ちゃんと /dev/tty が存在しています。あと気になるのが、tty1〜tty4 に違いがあることとか…
tty1〜tty4 の違いは別として、とりあえず tty と tty0 を作ってみます。
[root@hongo0u5 /]# mknod -m 666 /dev/tty c 5 0
[root@hongo0u5 /]# mknod -m 666 /dev/tty0 c 4 0
[root@hongo0u5 /]# ls -al /dev/|grep tty
crw------- 1 root tty 136, 4 12月 12 20:21 2015 console
crw-rw-rw- 1 root root 5, 0 12月 12 20:38 2015 tty
crw-rw-rw- 1 root root 4, 0 12月 12 20:38 2015 tty0
crw------- 1 root root 136, 0 12月 12 20:21 2015 tty1
crw------- 1 root root 136, 1 12月 12 20:21 2015 tty2
crw------- 1 root root 136, 2 12月 12 20:21 2015 tty3
crw------- 1 root root 136, 3 12月 12 20:21 2015 tty4
で、再度コンテナに ssh してみます。
Dec 12 20:44:37 hongo0u5 sshd[570]: Accepted publickey for root from 192.0.2.1 port 43663 ssh2
Dec 12 20:44:37 hongo0u5 sshd[570]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 12 20:44:37 hongo0u5 sshd[572]: error: ioctl(TIOCSCTTY): Operation not permitted
Dec 12 20:44:37 hongo0u5 sshd[572]: error: open /dev/tty failed - could not set controlling tty: No such device or address
う〜ん、やっぱりログインできません…。が、エラーが「No such file or directory」から「No such device or address」に変化しています。
うむむぅ…。続きはまた明日…。(「また明日」って、既にこのエントリを書いている時点で13日に入ってしまいましたが…f^^;)