【发布时间】:2020-11-07 16:36:17
【问题描述】:
这是我的第一篇文章,所以希望它是适当的而不是多余的。
我有一个使用 Flask Dash API 部署在 AWS Elastic Beanstalk 上的应用程序。我有一个带有 API 的 sn-p,它需要远程连接到我的 Raspberry Pi (SSH) 并解析出一些文件。
- 此代码 sn-p 在我的本地计算机上完美运行
- 我可以轻松地将 putty/ssh 放入我的 RPi 端口 22
- 在我的第一个路由器上,我打开了 tcp/udp 端口 22
- 在我的第二个路由器上,我有一个 NAT 转发虚拟服务器规则,将端口 22 定向到我的 RPI 的静态 IP 地址
import paramiko
import json
client = paramiko.client.SSHClient()
hostname='example'
port=22
username='pi'
password='masked'
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.load_system_host_keys()
print('loaded client')
client.connect(hostname, port, username, password)
sftp_client = client.open_sftp()
localFilePath='./some_file.json'
sftp_client.get('/home/pi/some_file.json', localFilePath)
sftp_client.close()
我收到错误 paramiko.ssh_exception.NoValidConnectionsError: [Errno None] Unable to connect to port 22 on
我假设这是 AWS 端或我的路由器上的某种网络访问问题。我也可以轻松地从我自己的网络外部连接到我的 RPi。我尝试在我的 EC2 负载均衡器上添加一些入站/出站规则,但即使完全打开它也无法解决问题。我翻遍了网络,找不到很多答案,所以我希望有人提出建议,也可以对其他人有益。
【问题讨论】:
-
您可以通过 ssh 进入您的 EB 实例,然后尝试通过 ssh 连接到您的 RPi 吗?
-
我没有尝试过,但我想要完成的基本上是让我的EB网站,SSH进入我的RPI,并且基本上在网站上输出一些值。我什至保护了 EB 网站 (SSL/HTTPS),但它仍然给我同样的错误。
-
如果您的 EB 实例没有连接到您的 RPi,则连接将失败。因此,如果您通过 ssh 进入 EB 实例并尝试手动连接到 RPI,则可以很好地解决问题。
-
我现在正在尝试,在通过 SSH 连接到 eb 时遇到问题。我设置了密钥,允许端口 22 实例化,但连接仍然出错。
-
好的,终于可以SSH了。似乎它不适用于客户端,但适用于 AWS 会话管理器。我必须附加一个对 EC2 具有完全管理员访问权限的 IAM 角色(在该角色上)。当我尝试从 EC2 SSH 到我的 RPi 时,说连接被拒绝,即使我的路由器上打开了端口 22。
标签: python amazon-web-services amazon-ec2 amazon-elastic-beanstalk paramiko