我想使用 cron 作业从服务器下载文件,因此我需要使用该scp
命令而不通过关键字给出密码。
我该怎么做?
答案1
第一步是在您复制的计算机上生成私钥-公钥对:
ssh-keygen
您可以使用默认值,并确保不提供使用密码。这可能需要一些时间。
第二步,密钥生成完成后,使用以下命令将公钥复制到服务器:
ssh-copy-id username@server
与适当的username
和server
.为此,您需要 的密码username
。如果username
没有密码,您可以通过root帐户复制带有公钥的文件,但临时为该帐户创建密码并使用要容易得多ssh-copy-id
第三步:使用以下命令测试安装的公钥是否有效:ssh username@server
或scp somefile username@server:/var/tmp
第四步:crontab -e
在客户端机器上添加一个cron作业():
15 23 * * * scp username@server:/path/on/server/downloadfile /local/destination
17 23 * * * scp /local/source/somefile username@server:/path/on/server/uploaddirectory
/path/on/server/downloadfile
它将每天晚上 11:15 从服务器复制文件,两分钟后开始上传/local/source/somefile
需要考虑的事项:
- 根据对客户端计算机(您从中进行复制的位置)访问的安全性以及未受保护的私钥所在的位置,您应该考虑更改帐户,
username
以便它只允许scp
而不允许ssh
。 - 如果您复制相同的文件并且内容大部分发生变化(例如附加,而不是完全重写),则使用
rsync
上面的 ssh 密钥对)会更有效。