
ども、なのまるです。
結構古めの「Amazon Linux」を最新の「2014.09」にアップデートしてみました!
そしたらハマりました~
もくじ
「Amazon Linux」をアップデートしたらハマった!
この古い「Amazon Linux」をアップデートしたら、SSHだけつながらなくなったので困りました。結果、解決したんですがその顛末を残しておきたいと思います。
前提条件
- Amazon Linux が2年以上前のもの (今回は「2012.09」)
- OpenSSHがバージョン「openssh-5.3p1」
OSの状態
アップデート前1 2 3 4 5 | __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https: //aws .amazon.com /amazon-linux-ami/2012 .09-release-notes/ |
アップデート後
1 2 3 4 5 | __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https: //aws .amazon.com /amazon-linux-ami/2014 .09-release-notes/ |
原因は「OpenSSH」のアップデート
アップデート前openssh-5.3p1-81.19.amzn1.x86_64(おそらくw)
アップデート後
openssh-6.2p2-8.42.amzn1.x86_64
/etc/ssh/sshd_configの差分
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 | --- sshd_config.bak 2013-01-21 06:32:06.064836211 +0000 +++ sshd_config 2014-12-01 09:28:43.518105312 +0000 @@ -1,4 +1,4 @@ -# $OpenBSD: sshd_config,v 1.80 2008/07/02 02:24:18 djm Exp $ +# $OpenBSD: sshd_config,v 1.89 2013/02/06 00:20:42 dtucker Exp $ # This is the sshd server system-wide configuration file. See # sshd_config(5) for more information. @@ -7,24 +7,27 @@ # The strategy used for options in the default sshd_config shipped with # OpenSSH is to specify options with their default value where -# possible, but leave them commented. Uncommented options change a +# possible, but leave them commented. Uncommented options override the # default value. +# If you want to change the port on a SELinux system, you have to tell +# SELinux about this change. +# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER +# #Port 22 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress :: -# Disable legacy (protocol version 1) support in the server for new -# installations. In future the default will change to require explicit -# activation of protocol 1 -Protocol 2 +# The default requires explicit activation of protocol 1 +#Protocol 2 # HostKey for protocol version 1 #HostKey /etc/ssh/ssh_host_key # HostKeys for protocol version 2 #HostKey /etc/ssh/ssh_host_rsa_key #HostKey /etc/ssh/ssh_host_dsa_key +#HostKey /etc/ssh/ssh_host_ecdsa_key # Lifetime and size of ephemeral version 1 server key #KeyRegenerationInterval 1h @@ -47,11 +50,17 @@ #MaxAuthTries 6 #MaxSessions 10 -RSAAuthentication yes -PubkeyAuthentication yes +#RSAAuthentication yes +#PubkeyAuthentication yes + +# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2 +# but this is overridden so installations will only check .ssh/authorized_keys AuthorizedKeysFile .ssh/authorized_keys -AuthorizedKeysCommand none -AuthorizedKeysCommandRunAs nobody + +#AuthorizedPrincipalsFile none + +#AuthorizedKeysCommand none +#AuthorizedKeysCommandUser nobody # For this to work you will also need host keys in /etc/ssh/ssh_known_hosts #RhostsRSAAuthentication no @@ -65,7 +74,6 @@ # To disable tunneled clear text passwords, change to no here! #PasswordAuthentication yes -PasswordAuthentication no #PermitEmptyPasswords no # EC2 uses keys for remote access PasswordAuthentication no @@ -83,8 +91,6 @@ # GSSAPI options #GSSAPIAuthentication no -#GSSAPIAuthentication yes -#GSSAPICleanupCredentials yes #GSSAPICleanupCredentials yes #GSSAPIStrictAcceptorCheck yes #GSSAPIKeyExchange no @@ -98,16 +104,12 @@ # If you just want the PAM account and session checks to run without # PAM authentication, then enable this but set PasswordAuthentication # and ChallengeResponseAuthentication to 'no'. +# WARNING: 'UsePAM no' is not supported in Fedora and may cause several +# problems. #UsePAM no # Leaving enabled as described so that account and session checks are run UsePAM yes -# Accept locale-related environment variables -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 - #AllowAgentForwarding yes #AllowTcpForwarding yes #GatewayPorts no @@ -116,12 +118,11 @@ #X11DisplayOffset 10 #X11UseLocalhost yes #PrintMotd yes -#PrintLastLog yes # Explicitly enable PrintLastLog yes #TCPKeepAlive yes #UseLogin no -#UsePrivilegeSeparation yes +UsePrivilegeSeparation sandbox # Default for new installations. #PermitUserEnvironment no #Compression delayed #ClientAliveInterval 0 @@ -129,16 +130,27 @@ #ShowPatchLevel no #UseDNS yes #PidFile /var/run/sshd.pid -#MaxStartups 10 +#MaxStartups 10:30:100 #PermitTunnel no #ChrootDirectory none +#VersionAddendum none # no default banner path #Banner none +# Accept locale-related environment variables +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 + # override default of no subsystems Subsystem sftp /usr/libexec/openssh/sftp-server +# Uncomment this if you want to use .local domain +#Host *.local +# CheckHostIP no + # Example of overriding settings on a per-user basis #Match User anoncvs # X11Forwarding no |
このsshd_configを「openssh-6.2p2-8.42.amzn1.x86_64」のものに入れ替えることで、動作させました。
詳細な原因は追い切れていないのですが、ちょうど同じ現象になったことがあるということで、この対応になりました。
対処方法
再起動してしまったあとでは、AWSは直接接続できる「コンソール」を用意していないためどうにもなりませんでした。(方法はあるのかも・・・)そこで、新しいインスタンスにEBSをマウントしてファイルを編集するという方法をとりました。
復旧手順
- 対象の接続できないEC2インスタンス(A)をSTOP
- EC2インスタンス(A)のRoot device名を確認する
- 新しいEC2インスタンス(B)を作成・起動
- EC2インスタンス(A)のEBS VolumeをDetach
- EC2インスタンス(B)にEC2インスタンス(A)のEBS Volumeをattach
- EC2インスタンス(B)で、マウント・ファイル編集
- EC2インスタンス(B)からDetach
- EC2インスタンス(A)にattachしなおす
スクリーンショット入れようとしましたが、大人の事情で載せられない情報がたくさんで「モザイクだらけ」になるのでやめましたw
対象の接続できないEC2インスタンス(A)をSTOP
ManagementConsoleか、何かしらの形でインスタンスをSTOPしてくださいEC2インスタンス(A)のRoot device名を確認する
インスタンスの詳細画面から「Root device」名を確認しておいてください。やってなくてハマったw
新しいEC2インスタンス(B)を作成・起動
新しいインスタンスを立ち上げます。既存のインスタンスでもいいですw
EC2インスタンス(A)のEBS VolumeをDetach
修正したいインスタンスの「EBS ID」を確認してVolumeメニューから「Detach」EBS IDを確認

EC2インスタンス(B)にEC2インスタンス(A)のEBS Volumeをattach
Volumeメニューから対象のEBSをマウントします。マウント先はデフォルトのままにしました。「/dev/sdf」
EC2インスタンス(B)で、マウント・ファイル編集
こんな感じで編集しました。1 2 3 4 5 6 | mount /dev/sdf /media cd /media/etc/ssh/ mv sshd_config sshd_config.bak cp -a sshd_config.rpmnew sshd_config cd / umount /media |
EC2インスタンス(B)からDetach
書き換えが終わったら、アンマウントして「Detach」しますEC2インスタンス(A)にattachしなおす
元のインスタンスにattachし直しますが、Deviceの指定で以前のものを使いましょうwこれちゃんと設定しないと起動しませんでした~

まとめ
- アップデート前にsnapshotを取るべきでしたw
- うーん、このハマり方結構レアっぽいです~
- こうやって、EBSマウントしてほかのEC2インスタンスからファイル編集するんだ!って勉強になりました