在EC2 AWS中使用UFW将自己锁定在SSH之外

Vic*_*dez 22 ubuntu amazon-ec2 ufw

我有一个使用Ubuntu的EC2实例.我用过sudo ufw enable之后才允许使用mongodb端口

sudo ufw allow 27017
Run Code Online (Sandbox Code Playgroud)

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

Vic*_*nwa 39

不知怎的,Mahesh的回答对我不起作用,如果你碰巧在我身边,试试这个.

  • 启动新实例(恢复实例).
  • 停止原始实例(不要终止)
  • 从原始实例中分离卷(问题卷)
  • 将其作为/ dev/sdf附加到恢复实例.
  • 通过ssh/putty登录恢复实例
  • 运行sudo lsblk以显示附加的卷并确认问题卷的名称.它通常以/dev/xvdf.我的是/dev/xvdf1
  • 装载问题量.

    $ sudo mount /dev/xvdf1 /mnt
    $ cd /mnt/etc/ufw
    
    Run Code Online (Sandbox Code Playgroud)
  • 打开ufw配置文件

    $ sudo vim ufw.conf
    
    Run Code Online (Sandbox Code Playgroud)
  • 按i编辑文件.
  • 更改ENABLED=yesENABLED=no
  • 键入Ctrl-C并键入:wq以保存文件.
  • 使用以下命令显示ufw conf文件的内容,并确保ENABLED=yes已更改为ENABLED=no

    $ sudo cat ufw.conf 
    
    Run Code Online (Sandbox Code Playgroud)
  • 卸载音量

    $ cd ~
    $ sudo umount /mnt
    
    Run Code Online (Sandbox Code Playgroud)
  • 从恢复实例中分离问题卷,并将其作为/ dev/sda1重新附加到原始实例.

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

来源:这里

  • 非常感谢你,你只是帮我摆脱真正的大麻烦 (3认同)
  • 新的AWS面板的路径是:`Actions` -> `Instance Settings` -> `Edit User Data` 。仅当实例正确停止时,可编辑字段才可见。 (3认同)
  • 你真是个好人。这应该被接受为答案。创建新实例(恢复实例)时要记住的一件事是确保区域和区域与原始实例相同。可以在“配置实例详细信息”页面->可用性区域中选择区域。 (2认同)
  • 这只是让我的生活更容易解决我的问题!泰! (2认同)

Mah*_*eja 16

  • 启动另一个EC2服务器实例实现此目的的最佳方法是使用EC2的"Launch More Like This"功能.这将确保操作系统类型,安全组和其他属性相同,从而节省一些设置时间.
  • 停止问题实例
  • 从问题实例中分离卷
  • 将卷附加到新实例

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

  • 安装音量
cd ~
mkdir lnx1
sudo mount /dev/xvdf ./lnx1
Run Code Online (Sandbox Code Playgroud)
  • 禁用UFW
cd lnx1
sudo vim ufw.conf
Run Code Online (Sandbox Code Playgroud)

现在找到ENABLED = yes并将其更改为ENABLED = no.

  • 分离音量

请务必先卸载卷:

sudo umount ./lnx1/
Run Code Online (Sandbox Code Playgroud)
  • 在我们的问题实例上将卷重新附加到/ dev/sda1
  • 引导问题实例
  • 如有必要,重新分配弹性IP地址
  • 删除临时实例及其关联的卷

你好 !!你很高兴.


zah*_*eer 11

其他方法对我不起作用.我的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
--//
Run Code Online (Sandbox Code Playgroud)

必须在粘贴之前停止实例,在启动实例之后你应该能够ssh.


小智 8

我知道这是一个老问题,但是我通过使用以下命令在“查看/更改用户数据”中添加命令来修复我的问题 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"
Run Code Online (Sandbox Code Playgroud)

#注意:我的实例是Ubuntu

  • 哇。仅此解决方案对我有用。其他答案主要是关于将实例固定到以前的状态(在启用ufw之前)。尽管启用了ufw,这是有关通过ssh连接的唯一一项协议。谢谢。 (2认同)

Fab*_*tto 7

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

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
--//
Run Code Online (Sandbox Code Playgroud)

4-启动您的实例

希望对你有帮助

  • 这就像一个魅力。不要忘记在 ssh 命令中更改(您的 Ec2 实例的)公共 IP 地址。 (7认同)
  • 这应该是正确的答案,因为需要的工作较少 (4认同)
  • 惊人的。节省我很多时间。 (3认同)
  • 干得漂亮。谢谢这个! (3认同)
  • 救星!谢谢你! (3认同)