【问题标题】:paramiko EOFError while trying to connect an ec2 device尝试连接 ec2 设备时出现 paramiko EOFError
【发布时间】:2017-07-29 02:51:38
【问题描述】:

我正在使用 Genymotion on demand aws 实例,并尝试从 python 连接它。我想从 python 向实例发送 adb 命令。这里有一个从任何计算机连接实例的教程:https://www.genymotion.com/help/on-demand/tutorial/enable-disable-adb/

用于为实例创建 ssh 隧道的 ssh 命令是:

ssh -i key.pem -NL 5555:localhost:5555 root@instance_ip

我尝试使用 paramiko 库,以及他们 repo(https://github.com/paramiko/paramiko/blob/master/demos/forward.py) 中的 forward.py 演示。

首先,我尝试通过 cli 创建隧道,这是我为创建 ssh 隧道输入的内容:

python forward.py <instance_ip> -r localhost:5555 -u root -p 5555 -K "path/to/mykey.pem"

回复是:

Connecting to ssh host <instance_ip>:22 ...
*** Failed to connect to <instance_ip>:22: EOFError()

我无法弄清楚这里有什么问题。

有人可以帮我吗?非常感谢!!

【问题讨论】:

    标签: python ssh amazon-ec2 paramiko ssh-tunnel


    【解决方案1】:

    您可以使用以下代码 sn-p 从 Python SSH 到 EC2 实例。

    key = paramiko.RSAKey.from_private_key_file(path/to/mykey.pem)
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    
    # Connect/ssh to an instance
    try:
        client.connect(hostname=instance_ip, username="root", pkey=key)
    
        # Execute a command(cmd) after connecting/ssh to an instance
        stdin, stdout, stderr = client.exec_command(cmd)
        print stdout.read()
    
        # close the client connection once the job is done
        client.close()
        break
    
    except Exception, e:
        print e
    

    【讨论】:

    • 我实际上尝试了很多这样的sn-ps(还有这个)。每次它都会向我抛出相同的“EOFError”。我认为可能是我的私钥文件有问题,但我真的不知道是什么问题。
    • 对于我发布的代码,不工作的唯一原因可能是 1) 错误的 pem 密钥 2) 错误的实例 IP 3) 错误的 EC2 实例用户名。请检查这些 3。如果这没有帮助,请在此处发布您的代码。注意:给出完整的文件路径,包括 pem 文件名。例如:key_path = os.path.join('license', 'file_name.pem')
    • 并且还要确保您的密钥和 ip 地址是来自您的 linux 机器的良好 ssh 并查看是否建立了连接。 ssh -i file_name.pem user_name@ip_address
    • 我完全按照你说的做了(实际上很多次),但它仍然不起作用。 paramiko.RSAKey.from_private_key_file 行工作正常,我还看到 paramiko 包中 pkey.py 中的函数 _read_private_key 看起来不错。我终端的 ssh 也可以。
    • 您知道其他检查我的 pem 文件的方法吗?顺便说一句,非常感谢!
    最近更新 更多