我正在尝试使用以下命令将我的文件移动到位于其他地方的另一个系统:
rsync -avrz src destination
它工作正常。但我需要将此命令放入 shell 脚本中并按如下方式运行:
#! /bin/sh
rsync -avrz srcfilelocation destination
运行时,它会要求输入目标系统密码。我知道该密码,并手动输入。
现在我决定将密码分配给环境变量,例如pswd="destination system password"
。我需要我的 shell 脚本从此变量中读取密码。我该如何编写脚本来执行此操作?
答案1
当您可以使用所谓的公钥基础设施时,您无需担心密码。
这是一种使用公钥和私钥来验证用户身份的方法。您存储一份私钥副本,另一台服务器则拥有一份公钥副本。当您登录时,它们会相互进行简短对话,确认公钥和私钥是否匹配,这样您无需输入密码即可登录。
只要您不与任何人共享您的私钥,这都是非常安全的!
设置起来非常简单。
在源机器上运行 ssh-keygen。您可以接受所有默认值,这对于此目的来说已经足够了。它将在您的 ~/.ssh 文件夹中生成您的私钥(id_rsa)和公钥(id_rsa.pub)。
现在您想要获取服务器上的公钥,这也很容易。
从源 PC 运行 ssh-copy-id username@servername。
这会将 id_rsa.pub 内容的副本放置在服务器的 ~/.ssh/authorized_keys 中。
现在,如果您从源 ssh 到目的地,您将无需密码即可进入。
你可能会问,这会对 rsync 产生什么影响?Rsync 使用 ssh!
请记住:永远不要泄露您的私钥(id_rsa),否则有人可能会冒充您。
答案2
我确实建议使用 PKI/SSH 密钥来执行此操作,但如果您需要,您可以像这样设置环境变量:
export RSYNC_PASSWORD="yourPasswordHere"
请注意,这确实存在一些潜在的安全隐患,并且仅在当前会话中可用。
默认将其添加到用户会话中:
echo 'export RSYNC_PASSWORD="yourPasswordHere"' >> ~/.bashrc
或者,您可以使用密码文件来存储密码。请注意,密码是纯文本,因此您应该采取措施保护它。
echo "yourPasswordHere" > yourPasswordFile.txt
rsync -avrz --password-file yourPasswordFile.txt src dest