我正在尝试使用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而非公钥,如何连接到实例
答案 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 console,AWS Command-Line Interface (CLI)或通过API调用运行命令。
send
命令不接受标记作为输入。但是,您可以先执行list-instances
命令按标记搜索实例,然后将instance-ids
传递给send
命令。请参阅:AWS CLI send-command