linux - 无论/dev/sda1 中的 EBS 如何,如何使 AWS EC2 允许 ssh 连接?

标签 linux amazon-web-services ubuntu amazon-ec2 ssh

我有一个应用程序已经在 EC2 上成功运行了几年。该系统是 Ubuntu 18.04.2 LTS (GNU/Linux 4.15.0-1032-aws x86_64)。
这是一个低流量的小而简单的应用程序。直到今天,我才对服务器本身进行任何更改。我想处理 X packages can be updated.消息,所以我跑了:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
然后我跑了sudo reboot .重新启动后,应用程序运行完美。我可以通过公共(public) URL 正常访问它并查看内容,包括 db(直接在服务器上的 postgresql)数据,没有问题或意外。
但是,当我再次尝试 ssh 进入机器时,我做不到。我愿意 ssh -i "key.pem" -vvv ubuntu@<IP>并得到:
debug1: Connecting to <IP> [<IP>] port 22.
debug1: connect to address <IP> port 22: Operation timed out
ssh: connect to host <IP> port 22: Operation timed out
没有对安全组进行任何更改。此外,这是一个如此小的项目,我从未设置过 EC2 Instance Connect 或类似的东西。
我曾想过启动一个新的 EC2 并只是切换 EBS 卷,认为 EBS 会带来应用程序和数据,而实例本身将具有配置和权限。
我对此(显然)不太了解,并且惊讶地发现 EBS 卷本身似乎是问题所在并且持有所有卡片。
我可以在两个 EC2 实例之间来回切换 EBS 卷。在任何给定时间,无论哪个具有最新(因此为空白)的 EBS 卷附加在 /dev/sda1允许 SSH 但肯定不会运行该应用程序。而且,反之亦然:无论哪个 EC2 实例具有原始 EBS 卷,都可以完美地运行应用程序,但让我无法访问 ssh。
在这种情况下,问题是:如何让其中一个 EC2 实例绕过此 EBS 问题并自行决定是否允许我连接 ssh?
或者:我在这里遗漏的明显和/或愚蠢的事情是什么?
PS:我确实有弹性IP来解决所有这些问题,所以DNS似乎不是问题的根源。

最佳答案

在 John Rotenstein 的帮助下,我能够解决这个问题。
以下是核心步骤:
阶段 1 - 附加和挂载附加卷
根据约翰的评论,可以从“好”卷启动实例,然后附加并安装“坏”卷。这使我能够浏览文件并查找问题。
AWS 面板

  • 将卷作为 root 附加到 EC2 实例通过使用 /dev/sda1姓名
  • 启动EC2实例
  • 在实例启动后附加另一个卷

  • 终端
  • SSH 进入服务器
  • 查看根卷信息:

  • ~$ df -hT /dev/xvda1
    
  • 检查已安装的卷:

  • ~$ lsblk
    
  • 查看其他卷信息:

  • ~$ df -hT /dev/xvdf1
    
  • 切换到root用户:

  • ~$ sudo su -
    
  • 将目录设为挂载路径:

  • ~$ mkdir /addvol
    
  • 将附加卷挂载到路径:

  • ~$ mount /dev/xvdf1 /addvol
    
  • 检查附加卷内容:

  • ~$ ls -la /addvol/home/ubuntu
    
    现在我可以查看和导航附加卷的内容、查找配置文件、查看授权 key 、文件权限等。
    This article from AWS帮了我很多忙。
    终于到了这一点,我找不到任何 key 或权限等问题。约翰将我指向this article dealing with Ubuntu's firewall things。 .
    第 2 阶段 - 处理防火墙
    我从 the article 运行了一些命令并试图了解它们是如何工作的。
    一旦我掌握了一点,我决定使用卷上现有的重启脚本来确保防火墙可以通过 SSH 连接。
    我更新了现有的自定义重启脚本,添加了以下几行:
    sudo ufw allow ssh
    sudo ufw allow 22
    sudo ufw disable
    sudo ufw --force enable
    
    基本上它要求允许 ssh 两次,一次按名称,然后按端口。我是这个东西的新手,只是为了矫枉过正。
    然后它会禁用并启用防火墙,以确保它在配置了这些新闻内容的情况下运行。
    因为sudo ufw enable需要交互,我选择使用sudo ufw --force enable .
    第 3 阶段 - 测试和使用它!
    脚本更新后,我退出了服务器。
    AWS 面板:
  • 停止 EC2 实例
  • 从实例中分离一个卷
  • 从实例中分离另一个卷
  • 重新附加“坏”卷,这次是 root
  • 启动EC2实例

  • 终端:
  • SSH 进入实例 - 瞧!

  • 注意:在真正 100% 工作之前,我的电脑提示 known_hosts事物。服务器 key 必须在更新/升级和/或所有卷更改之后发生更改。我不认为必须确认主机是什么大不了的,所以我通常只是清除本地.ssh/known_hosts中的所有内容。文件。如果您更喜欢具体,您可以在那里专门找到服务器的信息并仅删除相关行。

    关于linux - 无论/dev/sda1 中的 EBS 如何,如何使 AWS EC2 允许 ssh 连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68255064/

    相关文章:

    linux - 使用 setsockopt() 修改 TCP 中的内核结构?

    amazon-web-services - 仅通过 CloudFront 访问 ElasticBeanstalk

    amazon-web-services - 如何使用查询从 DynamoDb 中的表中获取所有记录

    ruby - 安装 Eclipse 和 Ruby 插件时出现问题

    linux - Linux [Ubuntu 16.04]-为Anaconda Python3安装MATLAB引擎

    python - 错误: [Errno 13] Permission denied: './configure' when use pip3 install matplotlib on termux

    linux - 以日期排序方式给出文件列表,修改时间在 2 天之前

    amazon-ec2 - 在多个可用区运行 ELB 是否成本更高?

    Python:我想使用python脚本执行shell命令

    linux - 无法 git 克隆