【问题标题】:Add an ssh key using Chef使用 Chef 添加 ssh 密钥
【发布时间】:2014-05-13 14:34:45
【问题描述】:

我想向使用 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 密钥时,我们会收到“无法打开与您的身份验证代理的连接”。

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

但是,没有为登录用户添加id_rsa 密钥,我看到 SSH 客户端没有运行。

我可能叫错了 tee,但这表明密钥是为其他用户添加的 - 可能是使用 sudo 运行 Chef 的副作用(不使用 sudo 时 Chef 不起作用)。

有没有人解决过这个问题,或者使用 Chef 向机器添加 SSH 密钥?

【问题讨论】:

    标签: ruby linux ssh chef-infra chef-recipe


    【解决方案1】:

    从您的问题中不确定您在寻找什么。 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 食谱,它为您提供了一个 insert_if_no_match 资源。

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这似乎是一种风格变化。改变我的字符串的连接方式会有什么帮助?
      猜你喜欢
      • 2023-03-03
      • 2014-11-29
      • 2018-03-21
      • 2021-02-23
      • 2011-11-04
      • 2018-02-25
      • 2018-03-15
      • 2017-11-02
      • 1970-01-01
      相关资源
      最近更新 更多