我在远程服务器上有一个文件夹,我通过 SSH 连接到该文件夹。当我需要同步文件夹时,我会通过 scp 手动访问。(我正在将我的文件夹与服务器上的文件夹同步。)
我如何设置这项工作通过某些脚本自动完成,以便它自动同步文件夹并自动插入密码?
谢谢你!
答案1
无密码 SSH 通常使用公钥认证。通常,您会使用密码加密私钥,但是由于您想要运行无人值守的同步脚本,我建议您以另一个用户的身份创建密钥,并以该用户的身份运行 shell 脚本。
在客户端:
mkdir ~/.ssh
chmod 700 ~/.ssh
ssh-keygen -q -f ~/.ssh/id_rsa -t rsa
# Press enter twice when asked for a passphrase
由于 Mac 没有 SSH Copy Id,因此您需要手动完成其工作:
scp ~/.ssh/id_rsa.pub [email protected]:~
在服务器上
mkdir ~/.ssh
chmod 700 ~/.ssh
# Append or copy public key to authorized keys file:
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
rm ~/id_rsa.pub
Ashell 脚本是具有可执行权限集的文本文件,其开头为
#!/bin/sh
# you can then do any commands that you do manually, ex:
# (See levy's answer for the rsync command to use)
rsync /home/Anders/ 192.168.3.5:~/backup/location
要定期执行脚本,您可以使用计划任务。假设我们将该脚本保存在 /home/Anders/bin/sync.sh 中。然后运行:
env EDITOR=nano crontab -e
以您想要运行 cron 脚本的用户身份。
在出现的文本编辑器中输入:
#Minute Hour Day Month Year Command
0 13 * * * /home/Anders/bin/sync.sh
以上将在每天的第 14 个小时的第 0 分钟同步(从零开始计数),根据您的需要进行调整。
另一种选择可能是SSH文件系统也就是说,您可以将其挂载并可以像普通目录一样对其进行操作。
答案2
为了能够在没有密码的情况下进行 rsync,您需要创建 ssh 私钥和公钥。并将您的公钥粘贴到远程服务器的 ~/.ssh/authorized_keys 文件中。http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub remote-host # you could also just login and create the authorized_keys file and paste your public key.
ssh remote-host
为了rsync -avz --delete -e ssh ~/dir/ user@server:/home/dir
我使用 --delete 来确保所有内容始终相同,但如果您不想这样做,请删除。此时将 rsync 命令放入 bash 脚本中,并将其放入 cron 中或在您想要时运行。