2016-04-21 85 views
2

我想從我的PC發送文件到許多服務器到服務器目錄中的特定文件夾使用一個腳本,爲了保持簡單,我想在開始時發送一個文件到一臺服務器而不是很多。發送文件到服務器中的特定路徑

我已經連接到使用密鑰進行身份驗證的服務器,所以我不需要在我的代碼中使用任何登錄信息。我已經使用了以下內容:

import pysftp as sftp 

def Filetransfer(): 
    try: 

     s = sftp.Connection(host='IP address')# this is where the server ip address is inserted 

     remotepath='/xx/yy/file.txt'# where my file will be transferred to 
     localpath='C:/Users/David/Desktop/file.txt'# this is the file location in my PC 
     s.put(localpath,remotepath) 
     s.close() 

    except Exception, e: 
     print str(e) 

Filetransfer() 

我得到以下異常:

AttributeError: "'Connection' object has no attribute '_transport_live'" in <bound method Connection.__del__ of <pysftp.Connection object at 0x0000000002E1F3C8>> 

我試圖插入IP地址旁邊的服務器端口,它並沒有幫助,因爲我得到同樣的錯誤。

+0

你絕對確保你使用正確的問題變化密碼並通過開放端口連接? – danidee

+0

hej danidee,我使用Pulse Secure SW連接到服務器。 Se這個https://www.pulsesecure.net和登錄是通過輸入我的用戶名和密鑰生成器完成的。我可以導航到服務器並使用SecureFX工具連接到每個服務器。因此,我需要的不是從我的PC中手動將文件拖動到服務器中的特定文件夾,而是自動執行。我不這應該是與上面的代碼有問題,但我不明白爲什麼我會得到這個錯誤:(即使您從另一個程序登錄到服務器,但仍然沒有辦法你的python( – ChakEL

+0

)腳本可以知道你已經登錄。所以你需要在你的腳本中使用登錄信息也 – danidee

回答

0

使用此

sftp.Connection(host="your_host", port="your_port", username="user_name", private_key="private_key") 

如果你仍然有private_keypassword

退房文檔

http://pysftp.readthedocs.org/en/release_0.2.8/pysftp.html

+0

Hi danidee,我設法解決了這個問題從我們公司的網站獲取服務器登錄信息。我沒有使用端口。我現在遇到的問題是,其他服務器集羣的登錄資源不同。所以我需要寫一個條件,如果登錄失敗,然後嘗試另一個登錄信息。我不知道該怎麼做,如果你能給我一個提示,那就太好了非常感謝你的文檔,我一定會在其他項目中使用它。 – ChakEL

+0

你好,我已經設法解決具有不同登錄信息的服務器的問題。我已經使用了2個不同的列表,每個列表都有與之對應的登錄信息(用戶名/密碼),以及2個循環。我希望做一個更聰明的代碼,在那裏我只需要製作一個包含具有2個不同登錄信息的服務器的List,通過使用一個while循環。但不幸的是,我沒有成功,但現在我對我目前的尷尬代碼感到厭煩:)當我有時間奢侈時,我會嘗試改進它。謝謝! – ChakEL

+0

您可以使用字典並讓您的腳本詢問用戶想要連接的服務器,例如'servers = {'server1':['username1','password1'],'server2':['username2',' password2']}'那麼你可以很容易地做'server.get('server1','對不起,服務器不存在')'。如果用戶指定server1應該返回包含server1的連接詳細信息的列表,或者如果找不到錯誤消息....並且由用戶指我:) – danidee