通过堡垒服务器在私有IP上使用boto SSH到EC2实例

时间:2017-05-20 19:43:05

标签: bash amazon-web-services ssh amazon-ec2 boto3

我正在尝试使用boto在EC2实例上执行一些bash脚本。 Boto在公共IP上提供了一种SSH到EC2实例的方式,但在我的情况下,实例只有私有IP。在这些实例上完成SSH的方式是使用主机,该主机可以使用专用IP(Bastion主机)在所有实例上进行SSH。 以下是连接到公共IP实例的脚本:

s3_client = boto3.client('s3')
s3_client.download_file('mybucket','key/mykey.pem', '/tmp/mykey.pem')
k = paramiko.RSAKey.from_private_key_file("/tmp/mykey.pem")
c = paramiko.SSHClient()
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
host=event
print "Connecting to " + host
c.connect( hostname = host, username = "ec2-user", pkey = k )

如果我们想要通过堡垒主机与公共IP host

连接,如果P.P.P.P拥有私有IP而非公钥,如何连接到实例

1 个答案:

答案 0 :(得分:0)

如果您的要求是触发在Amazon EC2实例上执行某些代码,那么最好使用Amazon EC2 Run Command而不是尝试自动化SSH连接。

  

Amazon EC2 Run Command提供了一种自动执行常见管理任务的简单方法,例如在Linux上执行Shell脚本和命令,在Windows上运行PowerShell命令,安装软件或补丁等。 Amazon EC2 Run Command允许您跨多个实例执行这些命令,并提供对结果的可视性,从而可以轻松管理各个实例的配置更改。

您的实例需要安装Amazon EC2 Systems Manager(SSM)代理。请参阅:Installing SSM Agent

然后,您将在Amazon EC2实例from the management consoleAWS Command-Line Interface (CLI)或通过API调用运行命令。

send命令不接受标记作为输入。但是,您可以先执行list-instances命令按标记搜索实例,然后将instance-ids传递给send命令。请参阅:AWS CLI send-command