Ruby 使用Chef添加ssh密钥

Ruby 使用Chef添加ssh密钥,ruby,linux,ssh,chef-infra,chef-recipe,Ruby,Linux,Ssh,Chef Infra,Chef Recipe,我想使用Chef向机器添加一个私有SSH密钥 我是Chef的新手,不是ruby程序员,所以下面的代码可能不太理想 我的食谱包括: 执行“添加私有ssh密钥”do 命令'ssh add'+::File.join('/home',node['user'],'.ssh/keys/id_rsa')) 用户节点['user'] 结束 在目标机器上运行sudo chef client时,在尝试添加SSH密钥时,我们会得到“无法打开到您的身份验证代理的连接” 这表明ssh客户端没有运行,因此我将配方更改为从

我想使用Chef向机器添加一个私有SSH密钥

我是Chef的新手,不是ruby程序员,所以下面的代码可能不太理想

我的食谱包括:

执行“添加私有ssh密钥”do
命令'ssh add'+::File.join('/home',node['user'],'.ssh/keys/id_rsa'))
用户节点['user']
结束
在目标机器上运行
sudo chef client
时,在尝试添加SSH密钥时,我们会得到“无法打开到您的身份验证代理的连接”

这表明ssh客户端没有运行,因此我将配方更改为从
eval$(ssh代理)&&
开始以启动客户端。之后,在shell中运行
sudo chef client
时,我们会看到绿色的命令,表示该命令已成功执行

但是,尚未为登录用户添加
id\u rsa
密钥,我看到SSH客户端没有运行

我可能是选错了球座,但这对我来说意味着该键是为不同的用户添加的-可能是Chef与sudo一起运行的副作用(当sudo未使用时Chef不工作)


是否有人有解决此问题的经验,或者使用Chef向计算机添加SSH密钥?

尝试将您的命令语句更改为:

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

从你的问题不确定你在找什么。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
一个稍微好一点的方法是使用
食谱,它提供了一个insert\u if\u no\u match资源


最好的方法可能是使用
用户
社区食谱,它可以从数据包中安装公钥。

这似乎是一种风格上的改变。更改字符串的连接方式有何帮助?