使用Chef添加ssh密钥

3
我希望能使用Chef在一台机器上添加私有SSH密钥。
我是Chef新手,不是Ruby程序员,下面的代码可能不太优秀。
我的配方包括以下内容:
execute "add private ssh key" do
  command 'ssh-add ' + ::File.join('/home', node['user'], '.ssh/keys/id_rsa')
  user node['user']
end

在目标机器上运行sudo chef-client时,我们会得到“无法打开连接到您的身份验证代理”的提示,这表明SSH客户端没有运行。因此我更改了食谱,以使用eval $(ssh-agent) &&启动客户端。在这之后,在shell中运行sudo chef-client命令时,我们可以看到该命令变成了绿色,表明该命令已成功执行。然而,登录用户没有添加id_rsa密钥,并且我发现SSH客户端没有运行。这可能意味着密钥是为不同的用户添加的 - 或许是使用sudo运行Chef的副作用(如果不使用sudo,Chef将无法工作)。有没有人遇到解决这个问题的经验,或者用Chef向机器添加SSH密钥的方法?
2个回答

3

从您的问题中不确定您所寻找的内容。ssh-add应该用于在用户主机上加载代理,以便可以将私钥从主机传递到主机。这应该使用登录脚本(如用户客户端上的.bashrc)完成。

如果我误解了您的意思,那么我认为您更有可能想要将公钥添加到服务器上用户的authorized_keys文件中,以便可以通过私钥进行身份验证。要执行此操作,可以在执行资源中附加以下行:

execute "add pub key" do
  command "echo #{node['pub_key']} >> ~#{node['ssh_user']}/.ssh/authorized_keys"
  not_if "grep #{node['pub_key']} ~#{node['ssh_user']}/.ssh/authorized_keys"
end

一种稍微更好的方法是使用 line cookbook,它提供了一个 insert_if_no_match 资源。

可能最好的方法是使用 users 社区 cookbook,它可以从 data_bags 安装公钥。


0

尝试将您的命令语句更改为以下内容:

command "ssh-add /home/#{node['user']} ./ssh/keys/id_rsa"

这似乎是一种风格的变化。改变字符串连接方式会如何帮助我? - Rich Tier

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接