如何在同一脚本中为Rsync保留密码?

时间:2018-12-22 18:39:12

标签: bash ssh passwords 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。

我是否可以使用其他任何方式仅键入一次密码?

2 个答案:

答案 0 :(得分:1)

如果您使用的是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}"

确保固定插座。

答案 1 :(得分:0)

最佳做法是设置SSH密钥对以进行自动身份验证;也就是说,创建SSH密钥对并将公共密钥复制到这些文件所在的服务器,然后在rsync命令rsync -Pruzh --copy-links -e "ssh -i /path/to/private.key" ...中使用私钥。这相当简单,安全,并且摆脱了提示。

您还可以使用sshpass之类的实用程序在提示中输入密码,但是这种方法不太安全。