使用Python访问Amazon EC2服务器上的文件



很抱歉,如果这是一个非常简单的问题,但我在谷歌上找不到任何信息来帮助。

我有一个Amazon EC2服务器设置,它收集一些科学仪器流式传输到服务器的数据,并将其保存为。csv文件。

我想从我的(远程)笔记本电脑上运行的Python脚本访问这些。csv文件。这可能吗?

我的理解是,我需要我的Python代码"登录"到服务器,然后将文件下载到本地目录。

任何帮助/指示将不胜感激。

更新1

我安装了paramiko并尝试了下面的代码

import paramiko
paramiko.util.log_to_file("D:/Temp/aws/paramiko.log")
# Open a transport
host,port = "##.##.###.##",##
transport = paramiko.Transport((host,port))
# Auth    
username,password = "username","password"
transport.connect(None,username,password)

但是,我得到以下错误:

SSHException: Error reading SSH protocol banner

日志文件看起来像这样:

DEB [20210202-17:54:47.282] thr=1   paramiko.transport: starting thread (client mode): 0x5202388
DEB [20210202-17:54:47.283] thr=1   paramiko.transport: Local version/idstring: SSH-2.0-paramiko_2.7.2
DEB [20210202-17:54:47.384] thr=1   paramiko.transport: Banner: 220-FileZilla Server 0.9.60 beta
DEB [20210202-17:54:47.384] thr=1   paramiko.transport: Banner: 220-written by Tim Kosse (tim.kosse@filezilla-project.org)
DEB [20210202-17:54:47.384] thr=1   paramiko.transport: Banner: 220 Please visit https://filezilla-project.org/
DEB [20210202-17:54:48.003] thr=1   paramiko.transport: Banner: 500 Syntax error, command unrecognized.
ERR [20210202-17:54:50.019] thr=1   paramiko.transport: Exception: Error reading SSH protocol banner
ERR [20210202-17:54:50.026] thr=1   paramiko.transport: Traceback (most recent call last):
ERR [20210202-17:54:50.027] thr=1   paramiko.transport:   File "C:UserscairaAnaconda3libsite-packagesparamikotransport.py", line 2211, in _check_banner
ERR [20210202-17:54:50.027] thr=1   paramiko.transport:     buf = self.packetizer.readline(timeout)
ERR [20210202-17:54:50.027] thr=1   paramiko.transport:   File "C:UserscairaAnaconda3libsite-packagesparamikopacket.py", line 380, in readline
ERR [20210202-17:54:50.027] thr=1   paramiko.transport:     buf += self._read_timeout(timeout)
ERR [20210202-17:54:50.027] thr=1   paramiko.transport:   File "C:UserscairaAnaconda3libsite-packagesparamikopacket.py", line 622, in _read_timeout
ERR [20210202-17:54:50.028] thr=1   paramiko.transport:     raise socket.timeout()
ERR [20210202-17:54:50.028] thr=1   paramiko.transport: socket.timeout
ERR [20210202-17:54:50.028] thr=1   paramiko.transport: 
ERR [20210202-17:54:50.028] thr=1   paramiko.transport: During handling of the above exception, another exception occurred:
ERR [20210202-17:54:50.028] thr=1   paramiko.transport: 
ERR [20210202-17:54:50.029] thr=1   paramiko.transport: Traceback (most recent call last):
ERR [20210202-17:54:50.029] thr=1   paramiko.transport:   File "C:UserscairaAnaconda3libsite-packagesparamikotransport.py", line 2039, in run
ERR [20210202-17:54:50.029] thr=1   paramiko.transport:     self._check_banner()
ERR [20210202-17:54:50.029] thr=1   paramiko.transport:   File "C:UserscairaAnaconda3libsite-packagesparamikotransport.py", line 2216, in _check_banner
ERR [20210202-17:54:50.029] thr=1   paramiko.transport:     "Error reading SSH protocol banner" + str(e)
ERR [20210202-17:54:50.029] thr=1   paramiko.transport: paramiko.ssh_exception.SSHException: Error reading SSH protocol banner
ERR [20210202-17:54:50.029] thr=1   paramiko.transport: 

我做了什么明显是错误的吗?

我应该使用"公共IPv4 DNS"吗?=比;ec2 -##-##-###-##. 我们-东- 2. - compute.amazonaws.com

我不确定上面的用户名应该是我的完整电子邮件地址还是我的短用户名。

您可以使用SCP或SFTP连接到服务器并将数据复制到本地机器。有很多方法可以做到这一点,但对于您的用例,您可以使用Paramiko之类的库来处理连接和文件传输,如果您喜欢示例代码,请查看答案https://stackoverflow.com/a/3635163/2156106

更新:对于EC2实例,您需要使用在创建实例时下载或提供的私钥,如下所示

import paramiko
key = paramiko.RSAKey.from_private_key_file("path_to_key.pem")
transport = paramiko.Transport((host, port))
transport.connect(username="username", pkey=key)
sftp = paramiko.SFTPClient.from_transport(transport)
sftp.get(remote_path , local_path)

用户名应该是服务器上的用户名。如果是ubuntu服务器,EC2默认是ubuntu

您可以使用scp或sftp (https://www.ssh.com/ssh/sftp/),但我强烈建议将这些文件从服务器发送到aws s3(甚至流式传输)。

然后可以使用awscli (https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html)或python的boto3 (https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-example-download-file.html)将文件从s3复制到本地目录

最新更新