我有一个远程服务器,我需要从中下载 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_keys
(ssh-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
为此使用服务器上的帐户,因为对客户端的根访问将意味着对远程计算机的根访问。