我查看了之前提出的有关此主题的问题,但没有找到与我要查找的内容相匹配的内容。
设想:
有两个 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 包内的用户密码进行硬编码,并用于
sshpass
从System2
.已通过基于主机的身份验证
user2
进行身份验证。System1
您可以调用该%post
部分中的替换命令来启用基于主机的身份验证并进行相应的配置~/.ssh/known_hosts
和~/.shosts
归档。
每种替代方案都有好处和安全隐患,最可接受的方案取决于您的环境策略。我无法选出最佳答案。
不知何故,您需要自动执行身份验证配置,user2@System2
或者System1
创建一条安装后消息,请求安装包的人员执行此操作。事实上,我不认为有任何替代方案可以System2
验证身份,而不System1
涉及生成和复制两个系统都知道的唯一身份验证数据。