web-dev-qa-db-ja.com

EC2 AWSのUFWでSSHから締め出された

UbuntuのEC2インスタンスがあります。 Sudo ufw enableを使用し、mongodbポートのみを許可した後

Sudo ufw allow 27017

SSH接続が切断されたとき、再接続できません

どういうわけか Mahesh の答えは私には役に立たなかった。たまたま私の靴の中にいるなら、これを試してみてください。

  • 新しいインスタンス(回復インスタンス)を起動します。
  • 元のインスタンスを停止します(終了しないでください)
  • 元のインスタンスからボリューム(問題ボリューム)を切り離します
  • / dev/sdfとしてリカバリインスタンスに添付します。
  • Ssh/PuTTY経由で復旧インスタンスにログインします
  • Sudo lsblkを実行して、接続されているボリュームを表示し、問題のあるボリュームの名前を確認します。通常、/dev/xvdfで始まります。私は/dev/xvdf1です
  • 問題のあるボリュームをマウントします。

    $ Sudo mount /dev/xvdf1 /mnt
    $ cd /mnt/etc/ufw
    
  • ufw構成ファイルを開きます

    $ Sudo vim ufw.conf
    
  • Iを押してファイルを編集します。
  • ENABLED=yesENABLED=noに変更します
  • Ctrl-Cを入力し、:wqと入力してファイルを保存します。
  • 以下のコマンドを使用してufw confファイルの内容を表示し、ENABLED=yesENABLED=noに変更されたことを確認します

    $ Sudo cat ufw.conf 
    
  • ボリュームのマウント解除

    $ cd ~
    $ Sudo umount /mnt
    
  • 問題のあるボリュームを復旧インスタンスから切り離し、元のインスタンスに/ dev/sda1として再接続します。

  • 元のインスタンスを起動すると、再びログインできるはずです。

ソース: here

31
  • 別のEC2サーバーインスタンスを起動するこれを実現する最善の方法は、EC2の「Launch More Like This」機能を使用することです。これにより、OSタイプ、セキュリティグループ、およびその他の属性が同じになり、セットアップ時間が少し短縮されます。
  • 問題のあるインスタンスを停止します
  • 問題のあるインスタンスからボリュームを切り離す
  • ボリュームを新しいインスタンスに接続する

注:新しいLinuxカーネルは、入力されたデバイス名が/ dev/sdfから/ dev/sdpであっても、デバイスの名前を内部的に/ dev/xvdpから/ dev/xvdfに変更する場合があります。

  • ボリュームをマウントする
cd ~
mkdir lnx1
Sudo mount /dev/xvdf ./lnx1
  • UFWを無効にする
cd lnx1
Sudo vim ufw.conf

ここでENABLED = yesを見つけて、ENABLED = noに変更します。

  • ボリュームを切り離す

最初にボリュームをアンマウントしてください。

Sudo umount ./lnx1/
  • 問題のインスタンスのボリュームを/ dev/sda1に再接続します
  • 起動問題インスタンス
  • 必要に応じてエラスティックIPアドレスを再割り当てします
  • 一時インスタンスとその関連ボリュームを削除します

ほら!!あなたは大丈夫です。

16
Mahesh Gareja

他のアプローチはうまくいきませんでした。私のEC2インスタンスはBitnamiイメージに基づいています。別のインスタンスへのボリュームのアタッチは、マーケットプレイスロックのために機能しませんでした。

その代わり、問題のインスタンスを停止し、このスクリプトをinstanceSettings>ビュー変更ユーザーデータに貼り付けます。

このアプローチでは、ボリュームをデタッチする必要がないため、他のボリュームに比べて簡単です。


Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
ufw disable
iptables -L
iptables -F
--//

これを貼り付ける前にインスタンスを停止する必要があります。この後にインスタンスを起動すると、sshができるようになります。

9
zaheer

これは古い質問ですが、bootcmdを使用して[ユーザーデータの表示/変更]にコマンドを追加することで修正しました

最初にインスタンスを停止しました

次に、これをユーザーデータに追加しました

#cloud-config
bootcmd:
 - cloud-init-per always fix_broken_ufw_1 sh -xc "/usr/sbin/service ufw stop >> /var/tmp/svc_$INSTANCE_ID 2>&1 || true" 
 - cloud-init-per always fix_broken_ufw_2 sh -xc "/usr/sbin/ufw disable>> /var/tmp/ufw_$INSTANCE_ID 2>&1 || true"

#注:私のインスタンスはUbuntuです

私は同じ問題を抱えており、この手順が機能することがわかりました:

1-インスタンスを停止します

2-「インスタンス設定->ユーザーデータの表示/変更」に移動します

3-これを貼り付け

Content-Type: multipart/mixed; boundary="//"
MIME-Version: 1.0
--//
Content-Type: text/cloud-config; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="cloud-config.txt"
#cloud-config
cloud_final_modules:
- [scripts-user, always]
--//
Content-Type: text/x-shellscript; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename="userdata.txt"
#!/bin/bash
ufw disable
iptables -L
iptables -F
--//

4-インスタンスを起動します

それがあなたのために働くことを願っています

2