首页 > 解决方案 > 如何在同一脚本中保留 Rsync 的密码?

问题描述

我写了这个脚本:

#!/bin/bash
SSH_USER=${SSH_USER:=$USER}

for department in A B C E L M V
do
    mkdir -p ./resources/${div}

    rsync -Pruzh --copy-links \
        ${SSH_USER}@server:${department}/foo/files \
        ${SSH_USER}@server:${department}/foo/photos \
        ./resources/${department}/foo

    rsync -Pruzh \
        ${SSH_USER}@server:${department}/bar/documents \
        ./resources/${department}/bar
done

它工作得很好,只是我必须写 14 次密码,这不太实用。

我听说过,ssh_agent但由于某些原因,它不适用于我的 WSL。

是否有任何替代方法可以让我只输入一次密码?

标签: bashsshpasswordsrsync

解决方案


如果您使用的是 openssh,那么您可以设置一个主连接并通过以下方式重用它:

DEST="${SSH_USER}@server"

TMPL=/tmp/sshctl/"%L-%r@%h:%p"
mkdir -p /tmp/sshctl
if ! ssh -nNf -o ControlMaster=yes -o ControlPath="${TMPL}" "${DEST}"; then
    echo "# Failed to setup SSH ControlMaster. Aborting."
    exit
fi

# ...

rsync -e "ssh -o 'ControlPath=${TMPL}'" ... "${DEST}":... ...
rsync -e "ssh -o 'ControlPath=${TMPL}'" ... "${DEST}":... ...

# ...

ssh -O exit -o ControlPath="${TMPL}" "${DEST}"

请务必固定插座。


推荐阅读