bash - 如何在同一脚本中保留 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。
是否有任何替代方法可以让我只输入一次密码?
解决方案
如果您使用的是 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}"
请务必固定插座。
推荐阅读
- python - 直接将python字符串转换为字节而不使用eval()
- python - 如何从 Python 中的 AppleScript 获取返回值?
- hyperledger-fabric - 由于缺少 escc,Fabric v1.2.0 的链码实例化失败
- reactjs - 为什么子组件在 React Native 中没有从父组件接收更新值?
- vbscript - UFT/QTP 动态网址
- python - Python中数字的质因数
- ansible - 如何在 Jinja/Ansible 中生成 dict 作为 var?
- git - 如何进行空合并提交(忽略更改)?
- microsoft-graph-api - 是否可以获得 OneDrive 项目的完整路径?
- jmeter - 从 csv 文件设置 JDBC 配置中的数据库密码?捷米特