問題在于,每次循環調用 rsync
都是新開一個連接,所以每次都需要輸入一次密碼。為了只輸入一次密碼,有以下幾種方式可以解決:
? 推薦方案:設置 SSH 免密登錄
最穩最安全的方式是:配置 SSH 免密登錄,一次配置,永遠不輸密碼。
步驟如下:
-
本地生成 SSH 密鑰(如果還沒有):
ssh-keygen -t rsa
按默認選項一路回車。
-
將公鑰傳到遠程主機:
ssh-copy-id host@172.31.178.114
-
測試一下登錄是否不再需要密碼:
ssh host@172.31.178.114
如果你能直接登錄,rsync
和 scp
就都不再需要密碼了。
🔁 如果你現在急用,不想配置免密,那可以用 sshpass
工具自動輸入密碼(不太安全)
安裝:
sudo apt install sshpass
修改你的腳本:
import os
import subprocessremote_base = "/home/host/Data/"
local = "/data/datasets/"
user_host = "host@172.31.xxx.xxx"
password = "your_password" # 不安全,不推薦長期寫在腳本里flysLists = ["xxx", "xxx", "xxxx", # ... 省略其余列表 ..."xxx", "xxx"
]for fly in flysLists:remote_path = os.path.join(remote_base, fly)full_remote = f"{user_host}:{remote_path}"cmd = ["sshpass", "-p", password,"rsync", "-azP", full_remote, local]subprocess.run(cmd)print("finished: ", fly)
🧠 總結推薦
方法 | 安全性 | 推薦度 | 特點 |
---|---|---|---|
SSH 免密登錄 | ??? | ????? | 配置一次,終身受益 |
sshpass | ? | ?? | 快捷測試,不推薦長期使用 |