Chef - 无需密码的 SSH

Chef - 无需密码的 SSH

执行时:

knife bootstrap {{IP}} --ssh-user centos --ssh-password '' \
--sudo --use-sudo-password --node-name node1 \
--run-list 'recipe[learn_chef_httpd]'

我收到以下错误:

ERROR: Net::SSH::AuthenticationFailed: Authentication failed for user centos@{{IP}}@{{IP}}

我正在尝试连接到没有密码的 centos 用户,因为我想使用 SSH-Key Auth。

我曾尝试传递多种排列:

knife bootstrap {{IP}} -x centos -i .chef/james-chef-validator.pem  --sudo  --run-list 'recipe[learn_chef_httpd]'

一切都没有成功......

如果使用-VV运行:

...

DEBUG: allowed methods: publickey,gssapi-keyex,gssapi-with-mic
DEBUG: none failed
DEBUG: trying publickey
DEBUG: connecting to ssh-agent
ERROR: could not connect to ssh-agent
ERROR: all authorization methods failed (tried none, publickey)
ERROR: Net::SSH::AuthenticationFailed: Authentication failed for user  centos@{{IP}}@{{IP}}

有任何想法吗?

答案1

修复!

因此,当您使用托管厨师时,您需要通过引导程序传入私钥,并将公钥放在您的 autherized_keys 文件中......

  1. 安装 ChefSDK
  2. 从托管 Chef SCP 获得您的入门套件
  3. 提取入门套件至 ~/chef-repo
  4. 生成新的密钥对: ssh-keygen
  5. 将公钥添加到您的 autherized_keys 文件中: $ cat id_rsa.pub >> authorized_keys
  6. 使用以下命令运行 Knife 引导程序:

    sudo knife bootstrap {{server-ip}} --ssh-user {{your-server-user}} -i ~/.ssh/id_rsa --sudo --node-name web1

那应该可行!

我还建议您作为 --ssh-user 传递的用户具有无密码 sudo 访问权限。

答案2

您需要的是 ssh 密钥。

最初,“node1”服务器(如下所示)需要为您的“centos”用户(如下所示)设置密码。为该用户设置密码后,请按照以下说明操作。

要进行设置,请以 chef 用户身份登录客户端服务器(运行 chef 的服务器)并运行

ssh-keygen -t rsa

按照说明操作(当要求输入密码时,只需按回车键)

然后运行以下命令

ssh-copy-id <targetuser>@<targetserver>

按照屏幕上的说明操作即可。Chef
应会自动获取该 ssh 密钥。

编辑:

对于 Hosted Chef,流程略有不同。在 Chef Manage 中,转到管理>用户>并选择您的用户名。在那里您应该会看到一个公钥。

以目标用户身份登录目标服务器,然后检查是否有 ~/.ssh 目录

ls ~/.ssh

如果显示“ls:无法访问〜/ .ssh:没有此文件或目录”则运行

mkdir ~/.ssh

然后使用您选择的命令行文件编辑器(我更喜欢 VIM)创建文件 ~/.ssh/authorized_keys 并将您在 Hosted Chef 上找到的公钥复制到该文件中。

编辑: 如果你的公钥采用以下格式开头:

-----BEGIN PUBLIC KEY-----

您首先需要将其转换为 SSH 公钥格式。

为此,请在本地计算机上创建一个名为 publickey.pem 的文件并将您的公钥复制到其中。然后打开终端进入该位置并运行:

ssh-keygen -f publickey.pem -i -m PKCS8

希望这有帮助。蒂姆。

答案3

我不知道有人像 Tim 建议的那样使用托管 Chef 服务器或本地 Chef 服务器提供的密钥作为他们的 SSH 身份验证密钥。

Chef 服务器提供的密钥通常仅由 Chef 客户端工具(例如 chef-client 和 knife)用于向 Chef 服务器的 API 进行身份验证。

正如 Tim 的第一个回复和 James 的最终回答所建议的那样,为 SSH 身份验证创建单独的密钥对是正确的做法。这可以手动完成,也可以使用 Chef 使用适当的 SSH 密钥配置系统。

相关内容