簡體   English   中英

使用 Python 訪問 Amazon EC2 服務器上的文件

[英]Access files on Amazon EC2 server with Python

如果這是一個非常簡單的問題,我深表歉意,但我在 Google 上找不到任何信息來提供幫助。

我有一個 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:\Users\caira\Anaconda3\lib\site-packages\paramiko\transport.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:\Users\caira\Anaconda3\lib\site-packages\paramiko\packet.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:\Users\caira\Anaconda3\lib\site-packages\paramiko\packet.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:\Users\caira\Anaconda3\lib\site-packages\paramiko\transport.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:\Users\caira\Anaconda3\lib\site-packages\paramiko\transport.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-##-##-###-##.us-east-2.compute.amazonaws.com

我不確定我上面的用戶名應該是我的完整 email 地址還是我較短的用戶名。

您可以使用 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.Z1787D7646304C5987CF4CF4CF4CF4E64A4A4A3973DC7Z.COL828281C..com/SFTP/甚至是這些文件。

you could then use awscli ( https://docs.aws.amazon.com/cli/latest/reference/s3/cp.html ) or python's boto3 ( https://boto3.amazonaws.com/v1/documentation/api/ latest/guide/s3-example-download-file.html )將文件從 s3 復制到本地目錄

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM