Как сохранить пароль для Rsync через один и тот же скрипт? - PullRequest
0 голосов
/ 22 декабря 2018

Я написал этот скрипт:

#!/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 голосов
/ 18 февраля 2019

Если вы используете 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}"

Обязательно защитите сокет.

0 голосов
/ 23 декабря 2018

Рекомендуется настроить пары ключей SSH для автоматической аутентификации;то есть создайте пару ключей SSH и скопируйте открытый ключ на сервер, где находятся эти файлы, затем используйте закрытый ключ в команде rsync: rsync -Pruzh --copy-links -e "ssh -i /path/to/private.key" ....Это довольно просто, безопасно и избавляет от приглашения.

Вы также можете использовать утилиту типа sshpass для ввода пароля в приглашении, но такой подход менее безопасен.

...