Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/343.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
Python piramiko,建立SSH连接时连接超时错误_Python_Linux_Amazon Web Services_Amazon Ec2_Boto3 - Fatal编程技术网

Python piramiko,建立SSH连接时连接超时错误

Python piramiko,建立SSH连接时连接超时错误,python,linux,amazon-web-services,amazon-ec2,boto3,Python,Linux,Amazon Web Services,Amazon Ec2,Boto3,我正在用Python开发一个项目,该项目将创建一个Amazon ec2实例,并建立一个SSH和SFTP连接,以便在我的机器和ec2实例之间传输文件和命令 所以我开始编码,我编码了使用boto3库创建ec2实例的函数 在那之后,我应该在我的机器和ec2实例之间建立一个SSH连接来发送命令,并且我还应该在我的机器和ec2实例之间传输和带回文件 经过研究,我发现有一个名为piramiko的Python库,用于在我的计算机和ec2实例之间建立SSH连接和SFTP连接 我试图在我的计算机和ec2实例之间建

我正在用Python开发一个项目,该项目将创建一个Amazon ec2实例,并建立一个SSH和SFTP连接,以便在我的机器和ec2实例之间传输文件和命令

所以我开始编码,我编码了使用boto3库创建ec2实例的函数

在那之后,我应该在我的机器和ec2实例之间建立一个SSH连接来发送命令,并且我还应该在我的机器和ec2实例之间传输和带回文件

经过研究,我发现有一个名为piramiko的Python库,用于在我的计算机和ec2实例之间建立SSH连接和SFTP连接

我试图在我的计算机和ec2实例之间建立SSH连接,但一天来我一直面临着“[Errrno 110]连接超时错误”。我在互联网上搜索了几个小时,但找不到任何有用的东西。 下面是出现“连接超时错误”的代码:

如果不在我的机器和ec2实例之间建立连接,我就不能再进一步了。

  • 您对解决这个问题有什么建议吗?
  • 皮拉米科还有其他图书馆吗?

    • 我设法解决了这个问题。问题是我的ec2实例。这些措施解决了问题:

      • 确保实例的安全组具有ssh deamon并允许您连接
      • 确保您拥有在创建实例时创建的密钥对
      • 确保执行
        chmod 400 keypair.pem

        • 我设法解决了这个问题。问题是我的ec2实例。这些措施解决了问题:

          • 确保实例的安全组具有ssh deamon并允许您连接
          • 确保您拥有在创建实例时创建的密钥对
          • 确保执行
            chmod 400 keypair.pem

          我也遇到了同样的错误,下面是我如何解决的:-

        • 在客户端VM上安装openssh客户端,在服务器VM上安装openssh服务器

        • 不要执行ssh@ip地址由于这将使您登录到主机vm,然后客户端和服务器上的IP都将相同,这是导致错误的主要原因

        • 3.改用

          ssh密钥扫描ip_地址>>~/.ssh/known_主机


          因此,已知主机密钥位于已知主机中,原始IP保留。

          我遇到了相同的错误,下面是我如何解决它的:-

        • 在客户端VM上安装openssh客户端,在服务器VM上安装openssh服务器

        • 不要执行ssh@ip地址由于这将使您登录到主机vm,然后客户端和服务器上的IP都将相同,这是导致错误的主要原因

        • 3.改用

          ssh密钥扫描ip_地址>>~/.ssh/known_主机


          所以知道主机密钥在已知主机中,原始IP保留。

          乍一看,我有两个想法。一个是您的
          time.sleep()
          可能是罪魁祸首,它导致ssh会话超时,因为它似乎会阻止连接,并且您尝试连接的服务器可能会在该点之前断开连接。另一个想法是:您是否尝试过手动运行这些命令,它们是否成功?您的
          connect()
          调用可能无效。我使用了
          time.sleep()
          ,因为ssh连接需要等待ec2实例的状态正在运行并检查了2/2。而且我也不能手动连接到ec2实例,ssh会给出相同的连接超时错误。难道没有更好的方法来检测吗?为什么不尝试在没有睡眠的情况下连接呢?如果连接失败,那么就睡眠一段时间。在x秒后重试连接,并重复,直到成功连接。30秒似乎相当随意。这里的问题是我无法连接到ec2实例,这不是因为睡眠,因为当我尝试使用ssh-I/filepath/sefa.pem连接到实例时ubuntu@public_dns出现了相同的连接超时错误。当然,除了睡眠之外,还有其他更方便的方法,但我将在建立ssh连接后介绍这一点。如果使用基本shell命令连接时出现错误,那不是paramiko库的错误。我不熟悉ec2,所以我建议通过亚马逊的支持来找出连接超时的原因。最后一种可能性:ssh守护进程是否在ec2实例上运行?乍一看,我有两个想法。一个是您的
          time.sleep()
          可能是罪魁祸首,它导致ssh会话超时,因为它似乎会阻止连接,并且您尝试连接的服务器可能会在该点之前断开连接。另一个想法是:您是否尝试过手动运行这些命令,它们是否成功?您的
          connect()
          调用可能无效。我使用了
          time.sleep()
          ,因为ssh连接需要等待ec2实例的状态正在运行并检查了2/2。而且我也不能手动连接到ec2实例,ssh会给出相同的连接超时错误。难道没有更好的方法来检测吗?为什么不尝试在没有睡眠的情况下连接呢?如果连接失败,那么就睡眠一段时间。在x秒后重试连接,并重复,直到成功连接。30秒似乎相当随意。这里的问题是我无法连接到ec2实例,这不是因为睡眠,因为当我尝试使用ssh-I/filepath/sefa.pem连接到实例时ubuntu@public_dns出现了相同的连接超时错误。当然还有比睡眠更方便的方法,但我会在建立ssh连接后介绍
          # creating a file named sefa.pem that will store the private key
          outfile = open('sefa.pem', 'w')
          keypair = ec2.meta.client.create_key_pair(KeyName='sefakeypair')  # creates key pair
          keyout= str(keypair['KeyMaterial'])  # reads the key material
          outfile.write(keyout)  # writes the key material in sefa.pem
          
          # creates the instance finally
          response = ec2.create_instances(ImageId='ami-34913254', MinCount=1, MaxCount=1, InstanceType='t2.micro')
          
              con = paramiko.SSHClient()  # ssh client using paramiko library
              con.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # this is needed because of adding policy automautically
              k = paramiko.RSAKey.from_private_key_file("sefa.pem")  # k reads sefa.pem and stores private key
              time.sleep(30)  # added this because ec2 should do 2/2 checks  before connecting
              print("connecting")
              con.connect(hostname=PUB_DNS, username="ubuntu", pkey=k, look_for_keys=True)  # HERE IS THE ERROR, I CAN'T CONNECT
              print("connected")
              stdin, stdout, stderr = con.exec_command('echo "TEST"')
              print(stdout.readlines())
              con.close()