解决ssh拉取服务器数据,要多次输入密码的问题
问题在于,每次循环调用 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 | ❌ | ⭐⭐ | 快捷测试,不推荐长期使用 |