通过chef在ec2中设置ssh passwordless

bfrts1fy  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(463)

我有以下几点 recipe/default.rb 厨师长:

  1. # Create empty RSA password
  2. template "#{node[:cluster][:ubuntu]}/my_key.pem" do
  3. source "keys.pem.erb"
  4. mode 0400
  5. owner "ubuntu"
  6. group "ubuntu"
  7. end
  8. bash "ssh-passwordless" do
  9. user "ubuntu"
  10. cwd "#{node[:cluster][:ubuntu]}"
  11. code <<-EOF
  12. eval `ssh-agent -s`
  13. ssh-add #{node[:cluster][:ubuntu]}/my_key.pem
  14. EOF
  15. end
  16. # Create empty RSA password
  17. execute "ssh-keygen" do
  18. command "sudo -u ubuntu ssh-keygen -q -t rsa -N '' -f /home/ubuntu/.ssh/id_rsa"
  19. creates "/home/ubuntu/.ssh/id_rsa"
  20. action :run
  21. end
  22. # Copy public key to node1; if key doesn't exist in authorized_keys, append it to this file
  23. execute <<EOF
  24. cat /home/ubuntu/.ssh/id_rsa.pub | sudo -u ubuntu ssh ubuntu@localhost "(cat > /tmp/tmp.pubkey; mkdir -p .ssh; touch .ssh/authorized_keys; grep #{node[:fqdn]} .ssh/authorized_keys > /dev/null || cat /tmp/tmp.pubkey >> .ssh/authorized_keys; rm /tmp/tmp.pubkey)

正如你所看到的,我尝试了很多方法来让它工作,然而,到目前为止没有一个成功。目标是在ec2中消除对password/pem文件的需要,这样我就可以建立一个hadoop集群。我怎样才能做到呢?

f3temu5u

f3temu5u1#

如果我理解的很好,您希望在node1上创建一个私钥,以便能够通过ssh连接node2。
你可以通过搜索很容易地做到。
在节点1上:

  1. # Create empty RSA password
  2. execute "ssh-keygen" do
  3. command "sudo -u ubuntu ssh-keygen -q -t rsa -N '' -f /home/ubuntu/.ssh/id_rsa"
  4. creates "/home/ubuntu/.ssh/id_rsa"
  5. end
  6. ruby_block "expose public key in attribute" do
  7. block do
  8. node.default['public_key'] = ::File.read("/home/ubuntu/.ssh/id_rsa.pub")
  9. end
  10. end

在node2上,搜索node1的公钥:

  1. node1 = search(:node, "name:node1").first
  2. file '/home/ubuntu/.ssh/authorized_keys' do
  3. content node1['public_key']
  4. end

当然,如果需要允许多个主机连接,则需要对其进行调整。

展开查看全部

相关问题