You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用rsync同步远程机器指定编号文件,无需重复输入SSH密码

rsync指定文件同步免重复输入密码解决方案

方案1:sshpass自动填密 + 单次rsync批量同步

你之前的脚本循环调用rsync会重复创建SSH连接,导致需要多次输入密码。改为单次调用rsync传递所有目标文件,仅需建立一次SSH连接,配合sshpass工具自动填充密码,全程仅需验证一次。

  1. 安装sshpass
    • Debian/Ubuntu 执行:sudo apt install sshpass
    • RHEL/CentOS 执行:sudo yum install sshpass
  2. 修正后的Python代码示例:
import subprocess
import getpass

# 目标文件编号列表,修正原语法错误
file_numbers = (
    '0074',
    '0080',
    '0125',
    '0322',
    '0323',
    '0324',
    '0325',
    '0326',
    '0328',
    '0329'
)

# 拼接所有远程文件路径
remote_prefix = "host:path/to/directory/file"
remote_files = [f"{remote_prefix}{num}" for num in file_numbers]
local_dir = "local/directory"

# 交互式读取SSH密码,输入内容不会明文显示
ssh_pass = getpass.getpass(prompt="请输入SSH密码:")

# 构造rsync命令
cmd = [
    "sshpass",
    "-p", ssh_pass,
    "rsync",
    "-rv"
] + remote_files + [local_dir]

# 执行同步
subprocess.run(cmd, check=True)

注意:多用户环境下建议把-p参数替换为-e,通过SSHPASS环境变量传递密码,避免密码出现在进程参数列表中造成泄露。

方案2:SSH控制连接复用(无需额外安装工具)

如果无法安装第三方工具,可以使用SSH原生的连接复用功能,仅需首次输入密码,后续所有rsync调用会复用同一个SSH连接,无需重复验证。

  1. 手动操作流程
    • 建立后台控制连接,默认保留30分钟:
      ssh -o ControlMaster=yes -o ControlPath=~/.ssh/rsync_control -o ControlPersist=30m 你的用户名@远程主机地址 -fN
      执行后输入一次密码即可
    • 运行你原本的同步脚本,所有rsync调用会自动复用连接,无需重复输密
    • 同步完成后手动关闭后台连接:
      ssh -o ControlPath=~/.ssh/rsync_control 你的用户名@远程主机地址 -O exit
  2. 你也可以在Python脚本中自动完成控制连接的创建和销毁,无需手动操作。

内容的提问来源于stack exchange,提问作者Nihrion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 22:06:03