非登录shell用户之间如何做SCP?

非登录shell用户之间如何做SCP?

我查看了之前提出的有关此主题的问题,但没有找到与我要查找的内容相匹配的内容。

设想:

有两个 centos 系统,比方说,System1 和 System2。

System1 中的脚本使用非登录 shell 用户 (user1) 从 Web 下载文件并将其放置在用户的主目录 (/home/user1) 中。

System2 中的另一个脚本使用非登录 shell 用户(user2)从 system1 中读取 scp 文件并执行一些操作。

这些用户是在使用 root 用户在两个系统中安装脚本时创建的。

下面是创建 user1 和 user2 的规范文件的片段。

getent group user1>/dev/null || groupadd -r user1
getent passwd user1>/dev/null || \
    useradd -r -g blacklist -m -s /sbin/nologin \
    -c "the user is created as it downaloads the conent from web" user1
exit 0

挑战:进行无密码 scp 的传统方法是创建一对密钥并在远程系统中复制公钥。但是,如果我无法登录,如何生成用户特定的密钥并将其复制到远程服务器?

请告诉我一个处理此要求的好方法。

答案1

由于使用 SCP 协议进行复制是 RPM 包的功能要求,并且 SCP 确实需要底层 SSH 身份验证,因此我只能想象以下选项:

  • 在生成的 RPM 包内硬编码 SSH 密钥对。这些密钥可以通过在ssh-keygen%build部分内部调用来生成,也可以提前生成并作为源文件导入。之后,它们可以正确安装为~/.ssh/id_rsa~/.ssh/authorized_keys

  • 对 RPM 包内的用户密码进行硬编码,并用于sshpassSystem2.

  • 已通过基于主机的身份验证user2进行身份验证。System1您可以调用该%post部分中的替换命令来启用基于主机的身份验证并进行相应的配置~/.ssh/known_hosts~/.shosts归档。

每种替代方案都有好处和安全隐患,最可接受的方案取决于您的环境策略。我无法选出最佳答案。

不知何故,您需要自动执行身份验证配置,user2@System2或者System1创建一条安装后消息,请求安装包的人员执行此操作。事实上,我不认为有任何替代方案可以System2验证身份,而不System1涉及生成和复制两个系统都知道的唯一身份验证数据。

相关内容