问题
启动具有扩展 HD 卷的 Ubuntu 14.04 EC2 实例后,通过 ssh-ing 进入该实例失败并显示Connection refused
.
EBS 扩展过程
我的一台 Ubuntu 14.04 EC2 机器在 HD 大小上运行不足。为了解决这个问题,我按照AWS自己的高清扩展手册:
- 停了机器
- 分离两个卷
- 拍摄了两个卷的快照
- 从快照创建了更大的卷
- 附加新卷并启动机器
除此之外,我还借此机会向机器添加了一个弹性 IP,如果这很重要的话。
Connection refused
启动机器后,我在 ssh 时不断收到错误消息。我尝试了从 VPC 内部到私有 IP 和外部的 ssh。我已经使用了XX.X.XXX.XX
IP 和ec2-XX-X-XXX-XX.compute-1.amazonaws.com
DNS 名称,以及我在创建时从 AWS 下载的原始.pem
密钥,以及我放置在.ssh/authorized_keys
机器中的 ssh 密钥。
我得到同样的回应:
ssh:连接到主机 ec2-XX-X-XXX-XX.compute-1.amazonaws.com 端口 22:连接被拒绝
笔记/我尝试了什么
- 我已将卷连接到另一个实例并检查了它们。文件在那里。
- 我尝试从
PermitRootLogin
/etc/ssh/sshd_config
. - 我尝试使用 EC2 控制台中的 Java 客户端连接到机器。
- 我尝试将原始卷连接到机器(扩展之前)。我还是明白了
Connection refused
。 - 根 EBS 卷连接在
/dev/sda1
。
解决方案
更新:问题已解决。非常感谢这里的每一个人!
只是把这个肮脏的hacky脚本,我用它来调试一次(你只需要在机器上安装python 2.xx)。这很脏,但无论如何都可以提供帮助!
将您的卷附加并挂载到另一个 VM 并在其上创建一个文件,例如 /whatever_mount_path/you_like/cgi-bin/cmd.py('cgi-bin' 很重要),内容如下:
然后在您的卷的“/etc/rc.local”中,添加这些行:
将您的卷重新附加到初始计算机,然后启动它。从现在开始,您可以通过将 cmd 作为 GET 查询字符串从 Web 浏览器执行系统命令。例如:
这将由您的浏览器编码为:
只需确保端口 8000 空闲,并且您的安全组配置正确
在与 AWS 支持者进行聊天支持会话后,我们发现了问题所在。
我已经扩展了两卷 -
/dev/sda1
和/dev/sdf
. 当我将扩展卷连接到机器时,由于某种原因,第二个卷被附加为不同的设备(/dev/sdg
如果我没记错的话)。这导致了一些启动问题并且sshd
从未出现过。当支持者注意到差异时,我重新连接了音量
/dev/sdf
,一切正常。感谢大家的帮助——你们太棒了!
Connection refused
通常意味着在相关 IP:Port 上没有任何监听。通常您可以通过使用 OOB 控制台登录系统并运行 netstat 来确认这一点,例如将确认某些东西是否正在侦听端口 22。
由于您可能没有 OOB 控制台,因此您不得不将卷安装在另一个实例上并在日志和配置文件中进行挖掘。
检查您的 sshd 是否配置为侦听正确的接口和端口。当您在那里时,增加 LogLevel,以便下次启动时获得更多信息。
挖掘所有日志,看看是否有任何相关消息。
我想您也可以通过简单地编辑相关文件并让它运行 netstat 命令来向系统添加一个 cron 作业。我不使用 Ubuntu 但类似
在 /etc/crontab (或任何 Ubuntu 使用的)中将在系统启动后获得系统快照
尽管我希望它会给出不同的错误消息,但请确保正确配置了 EC2 安全组。