Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 通过bastion服务器在专用IP上使用boto将SSH连接到EC2实例_Bash_Amazon Web Services_Ssh_Amazon Ec2_Boto3 - Fatal编程技术网

Bash 通过bastion服务器在专用IP上使用boto将SSH连接到EC2实例

Bash 通过bastion服务器在专用IP上使用boto将SSH连接到EC2实例,bash,amazon-web-services,ssh,amazon-ec2,boto3,Bash,Amazon Web Services,Ssh,Amazon Ec2,Boto3,我正在尝试使用boto在EC2实例上执行一些bash脚本。Boto提供了一种通过SSH连接到公共IP上的EC2实例的方法,但在我的例子中,这些实例只有私有IP。在这些实例上执行SSH的方式是使用一台主机,该主机可以使用私有IP堡垒主机在所有实例上执行SSH。 以下是连接到公共IP上的实例的脚本: s3_client = boto3.client('s3') s3_client.download_file('mybucket','key/mykey.pem', '/tmp/mykey.pem')

我正在尝试使用boto在EC2实例上执行一些bash脚本。Boto提供了一种通过SSH连接到公共IP上的EC2实例的方法,但在我的例子中,这些实例只有私有IP。在这些实例上执行SSH的方式是使用一台主机,该主机可以使用私有IP堡垒主机在所有实例上执行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而不是公钥如果我们希望通过bastion主机连接到公共IP p.p.p.p

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

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

您的实例需要安装Amazon EC2 Systems Manager SSM代理。见:

然后,您可以在AmazonEC2实例上或通过API调用运行命令


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

我正在尝试根据EC2实例上的一些标记执行一些bash脚本。那可能吗?如果是,那么你能简要介绍一下吗?我已经更新了我的答案。不能选择“按标记”,但可以先按标记查找实例,然后对其运行命令。阅读一下手册-这是一种在多个EC2实例上运行命令的非常健壮的方法。我想要一个自动化的解决方案,而不是手动的。如果您能在我的boto脚本中帮助我使用私有IP进行ssh,那将是一个很大的帮助EC2 Run命令可以完全自动化,可以通过CLI或API(例如使用boto)。它比使用SSH单独连接到每个实例更具可扩展性和可靠性。它在处理故障和提供备份日志方面也更好。您在哪里运行脚本?在您自己的计算机上或在Internet上,还是在Amazon EC2实例上?如果是EC2,是否在同一VPC中?如果它在EC2之外,并且您试图连接到私有子网中的实例,那么您需要SSH连接到公共实例,然后以某种方式启动另一个SSH连接,从那里连接到私有实例。是的,有一个实例我需要先SSH连接到,然后从这个实例我将SSH连接到私有子网中的实例。如何使用paramiko在上面的脚本中实现这一点。你不能这样做。您需要SSH到一个面向公共的实例中,然后启动另一个从公共实例到私有实例的SSH会话。您是否在bastion主机中设置了重定向或SSH隧道服务?