43

我有一个带有 Ubuntu 的 EC2 实例。我使用sudo ufw enable并且之后只允许mongodb端口

sudo ufw allow 27017

当 ssh 连接中断时,我无法重新连接

4

6 回答 6

99

# 更新

最简单的方法是更新实例的用户数据

  • 停止您的实例

  • 右键单击 (windows) 或 ctrl + 单击 (Mac) 实例以打开上下文菜单,然后转到Instance Settings->Edit User Data或选择实例并转到Actions-> Instance Settings->Edit User Data

    如果您仍在使用旧的 AWS 控制台,请选择实例,转到Actions-> Instance Settings->View/Change User Data

并粘贴这个

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 应该可以工作。如果启用,用户数据将禁用 ufw,并刷新任何阻止 ssh 访问的 iptable 规则

来源在这里

# 旧答案

使用另一个实例分离并修复问题实例的卷

  • 启动一个新实例(恢复实例)。

  • 停止原始实例(不要终止)

  • 从原始实例中分离卷(问题卷)

  • 将其作为 /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=yes已更改为ENABLED=no

      $ sudo cat ufw.conf 
    
  • 卸载卷

      $ cd ~
      $ sudo umount /mnt
    
  • 从恢复实例中分离问题卷并将其重新附加到原始实例作为 /dev/sda1。

  • 启动原始实例,您应该能够重新登录。

来源:这里

于 2018-02-26T17:15:22.957 回答
59

我有同样的问题,发现这个步骤有效:

1-停止您的实例

2-转到Instance Settings->View/Change user Data

更新:新 AWS 控制台 UI 上的路径

右键单击您的Stopped实例 -> Instance Settings->Edit User Data

3-将其粘贴到选项上Modify user data as text并保存

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-启动您的实例

希望这对你有用!

于 2019-06-12T21:09:12.813 回答
18
  • 启动另一个 EC2 服务器实例 完成此操作的最佳方法是使用 EC2 的“Launch More Like This”功能。这将确保操作系统类型、安全组和其他属性相同,从而节省一些设置时间。
  • 停止问题实例
  • 从问题实例中分离卷
  • 将卷附加到新实例

注意:较新的 Linux 内核可能会在内部将您的设备重命名为 /dev/xvdf 到 /dev/xvdp,即使输入的设备名称是 /dev/sdf 到 /dev/sdp。

  • 挂载卷
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 地址
  • 删除临时实例及其关联卷

你好 !!你很好。

于 2017-01-30T06:03:00.447 回答
14

其他方法对我不起作用。我的 EC2 实例基于 Bitnami 映像。由于市场锁定,无法将卷附加到另一个实例。

因此,请停止问题实例并将此脚本粘贴到 instanceSettings > view-change user data 中。

这种方法不需要分离卷,因此与其他方法相比更直接。


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。

于 2018-06-23T08:25:58.480 回答
12

我知道这是一个老问题,但我通过在查看/更改用户数据中添加一个命令来修复我的问题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

于 2018-06-26T03:38:54.397 回答
0

这是 user-data-script的一个更扩展的版本:

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
set -x
USERNAME="ubuntu"
ls -Al
ls -Al /home
ls -Al /home/${USERNAME}
ls -Al /home/${USERNAME}/.ssh
sudo cat /home/${USERNAME}/.ssh/authorized_keys
ls -Al /etc/ssh
ls -ld /etc/ssh

sudo grep -vE '^$|^#' /etc/hosts.*
sudo sed -i -e 's/^\([^#].*\)/# \1/g' /etc/hosts.deny
sudo sed -i -e 's/^\([^#].*\)/# \1/g' /etc/hosts.allow
sudo grep -vE '^$|^#' /etc/hosts.*
sed '/^$\|^#/d' /etc/ssh/sshd_config

chown -v root:root /home
chmod -v 755 /home
chown -v ${USERNAME}:${USERNAME} /home/${USERNAME} -R
chmod -v 700 /home/${USERNAME}
chmod -v 700 /home/${USERNAME}/.ssh
chmod -v 600 /home/${USERNAME}/.ssh/authorized_keys

sudo tail /var/log/auth.log
sudo ufw status numbered
sudo ufw disable
sudo iptables -F
sudo service iptables stop
sudo service sshd restart
sudo service sshd status -l
--//
于 2020-05-28T07:51:38.103 回答