我想设置一个 cron 作业来将数据从一台主机(A)传输到另一台主机(B)。
到目前为止,我的理解是,我必须在机器 B 上创建一个用户,以便 scp 可以将文件复制到用户主目录中的文件夹中。
但是,我不希望新创建的用户拥有将文件从机器 A 复制到 B 所需的最低限度的任何权限。
我认为用户:
- 需要能够登录到机器 B
- 不能运行 sudo 或 su
- 理想情况下,不应该能够在其主目录之上进行 cd(听起来像是 chrooted 用户,不知道是否可能)
- 应该只能写入单个文件(在机器 B 上的主目录中),甚至不允许运行任何进程或脚本等。
该用户的全部目的仅仅是能够偶尔将文件从机器 A 传输到机器 B,而不会以任何方式损害机器 B 的安全性。
我想将此传输作为无人值守的 cron 作业运行。我还想以压缩和加密的形式发送文件,因此我需要知道如何做到:
- 加密时无需输入密码(因此可以在脚本中使用)
- 如何使用 scp 而不提示输入密码
任何有关上述内容的帮助都将不胜感激
顺便说一句,我正在运行 Ubuntu 10.0.4 LTS,我正在考虑使用 gpg 进行加密,但我愿意接受建议/推荐
答案1
您可以rssh
为此安装:受限 SSH Shell。这将限制您的用户仅发起“SFTP”或 SCP 会话。当用户尝试打开终端会话时,rssh 将拒绝该请求。
rssh
可以通过将 shell 指定为用户来激活它。例如,可以这样做/etc/passwd
。
请注意,用户仍有权读取磁盘上的每个常规文件。这可以通过 SELinux/AppArmor/a chroot 来解决,但这是一个相对复杂的设置。如果您只关心对特定文件夹的访问,我建议运行专用的 FTPS 服务器。
答案2
我可以建议你不要使用 sftp 吗?锁定一个人们可以登录的用户帐户,以便没有什么可以做到非常困难,并且 sftp 依赖于正常的 ssh 身份验证。
相反,我建议您使用 ftps。这样您就可以获得加密隧道,并且可以使用 X.509 客户端证书进行身份验证,从而避免使用密码。
看https://help.ubuntu.com/10.04/serverguide/C/ftp-server.html有关 ftps 的更多信息。