如何从AWS gitlab-runner SSH到EC2实例

87次阅读
没有评论

问题描述

在使用AWS gitlab-runner时,遇到了一个问题。他在部署过程中需要通过SSH连接到另一个EC2实例,但每次SSH连接都失败(有一个例外)。他已经在EC2实例的安全组中添加了一个入站规则,允许来自gitlab-runner管理器和gitlab-runner机器安全组的SSH连接。但是,SSH连接仍然被拒绝。允许来自0.0.0.0/0的SSH流量可以使gitlab-runner到EC2实例的SSH连接成功。用户想知道为什么允许gitlab-runner安全组的入站规则不起作用,以及如何修复这个问题,以便不必将EC2实例对外开放以获取来自gitlab-runner的SSH访问。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

当你使用公共IP时,流量会离开你的VPC并返回,此时它不再被识别为来自该安全组。因此,你可以调整你的SSH连接,使用私有IP。
以下是解决方案的步骤:
1. 获取EC2实例的私有IP地址。
2. 使用私有IP地址进行SSH连接。
下面是一个示例:

ssh -i your_key.pem ec2-user@private_ip_address

在上面的示例中,your_key.pem是你的密钥文件,private_ip_address是EC2实例的私有IP地址。你需要将这些值替换为你自己的值。

方案2

在使用私有IP进行SSH连接时,你可能还需要将私有IP添加到你的ssh known_hosts文件中。
如果你使用私有IP进行SSH连接,你可能还需要将私有IP添加到你的ssh known_hosts文件中。你可以使用ssh-keyscan命令来获取EC2实例的正确主机密钥,并将其添加到known_hosts文件中。
以下是解决方案的步骤:
1. 打开终端或命令提示符。
2. 运行以下命令,将正确的主机密钥添加到known_hosts文件中:

ssh-keyscan -t [encryption_type] [ec2_private_ip_address] >> ~/.ssh/known_hosts

在上面的命令中,encryption_type是加密类型(如rsa),ec2_private_ip_address是EC2实例的私有IP地址。你需要将这些值替换为你自己的值。

请注意,这个解决方案可能需要在每次EC2实例的主机密钥发生变化时更新known_hosts文件。

总结

在使用AWS gitlab-runner时,如果你需要通过SSH连接到EC2实例,你可以使用私有IP进行连接,并将私有IP添加到你的ssh known_hosts文件中。这样可以避免将EC2实例对外开放以获取来自gitlab-runner的SSH访问。

正文完