【问题标题】:How to retain password for Rsync across the same script?如何在同一脚本中保留 Rsync 的密码?
【发布时间】:2019-02-18 16:27:42
【问题描述】:

我写了这个脚本:

#!/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。

有没有其他方法可以让我只输入一次密码?

【问题讨论】:

    标签: bash ssh passwords rsync


    【解决方案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}"
    

    一定要固定好插座。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2014-12-15
        • 1970-01-01
        • 1970-01-01
        • 2019-06-17
        • 2019-09-18
        • 2011-09-26
        • 1970-01-01
        • 1970-01-01
        • 2022-09-28
        相关资源
        最近更新 更多