簡體   English   中英

通過Python中的scp和os模塊從遠程服務器安全復制文件

[英]Secure Copy File from remote server via scp and os module in Python

我是Python和編程的新手。 我正在嘗試通過python腳本在兩台計算機之間復制文件。 但是代碼

os.system("ssh " + hostname + " scp " + filepath + " " + user + "@" + localhost + ":" cwd)

不行。 我認為它需要一個密碼,如使用SCP或SSH如何使用Python將文件復制到遠程服務器中所述? 我沒有得到任何錯誤日志,該文件不會顯示在我當前的工作目錄中。

但是,使用os.system("ssh " + hostname + "command")os.popen("ssh " + hostname + "command")所有其他命令都可以正常工作。 - > command = eg ls

當我在命令行中嘗試ssh hostname scp file user@local:directory時,它無需輸入密碼即可運行。

我嘗試將os.popen命令與getpass和pxssh模塊結合起來建立與遠程服務器的ssh連接,並使用它直接發送命令(我只測試它以獲得簡單的命令):

import pxssh
import getpass

ssh = pxssh.pxssh()
ssh.force_password = True
hostname = raw_input("Hostname: ")
user = raw_input("Username: ")
password = getpass.getpass("Password: ")
ssh.login(hostname, user, password)
test = os.popen("hostname")
print test

但是我無法將命令傳遞到遠程服務器( print test顯示,hostname = local而不是遠程服務器),但是我確信,連接已經建立。 我認為建立連接比在bash命令中始終使用"ssh " + hostname更容易。 我還嘗試了一些解決方法, 如何使用SCP或SSH將文件復制到Python中的遠程服務器? 但我必須承認,由於缺乏經驗,我沒有讓他們工作。

非常感謝幫助我。

我認為最簡單的(避免輸入密碼)和最安全的方法是首先設置公鑰/私鑰認證 完成后,您可以通過執行ssh user@hostname登錄到遠程系統,以下bash命令可以解決這個問題:

scp some/complete/path/to/file user@remote_system:some/remote/path

相應的Python代碼將是:

import subprocess

filepath = "some/complete/path/to/file"
hostname = "user@remote_system"
remote_path = "some/remote/path"

subprocess.call(['scp', filepath, ':'.join([hostname,remote_path])])

暫無
暫無

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

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