Shell 脚本 - 如何 scp 到远程服务器并下载文件并保护密码

Shell 脚本 - 如何 scp 到远程服务器并下载文件并保护密码

我有一个远程服务器,我需要从中下载 Apache 日志。

我可以手动scp进入服务器并获取文件,但我想将其放入 crontab 中。自动化它的唯一方法是包含目标服务器的密码,但我不想这样做。

您建议如何scp进入其他服务器,获取文件并将其下载到另一台计算机?

答案1

您可以在服务器端授权任意数量的公钥。此外,您可以将密钥限制为服务器端的特定命令。所以在客户端生成SSH密钥对,并且不要在私钥上放置密码。将公钥追加到授权密钥列表中,并添加命令限制。

ssh-keygen -t rsa -f ~/.ssh/apache-logs-download.id_rsa -N ''
ssh-copy-id -i ~/.ssh/apache-logs-download.id_rsa server.example.com:

在服务器上,编辑新添加的行~/.ssh/authorized_keysssh-copy-id在最后添加)并添加强制命令指令:

command="/usr/bin/rrsync -ro /var/log/apache",no-port-forwarding,no-X11-forwarding,no-agent-forwarding,no-pty ssh-rsa AAAA…

rrsync是 rsync 的包装脚本,专门设计用于仅允许通过 SSH 与特定目录进行 rsync。如果rrsync位于除 之外的目录中,请更改上面的路径/usr/bin

答案2

我建议在客户端计算机上创建私钥/公钥对,并将公钥复制到远程计算机。

您可以使用 生成这样的密钥对ssh-keygen并将其复制到远程计算机ssh-copy-id

服务器上的所有用户帐户可能都可以读取日志(至少它们在我的计算机上)。因此,您不应该root为此使用服务器上的帐户,因为对客户端的根访问将意味着对远程计算机的根访问。

相关内容