Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 集成Terraform和Serverspec_Ssh_Amazon Ec2_Terraform_Serverspec - Fatal编程技术网

Ssh 集成Terraform和Serverspec

Ssh 集成Terraform和Serverspec,ssh,amazon-ec2,terraform,serverspec,Ssh,Amazon Ec2,Terraform,Serverspec,我正在使用Terraform自动构建基于AWS EC2的docker主机,然后使用其remote exec选项下载docker文件,构建并运行它 我希望将其与Serverspec集成,但我正在努力解决两件事: 将新创建的AWS EC2实例的外部dns传递给Serverspec的最佳方法 如何为Serverspec配置SSH选项,以便它使用ec2用户帐户在AmazonLinuxAMI上正确执行 我通常使用预定义的密钥对连接到EC2实例,从不使用密码,但是ServerSpec似乎在服务器上以sudo

我正在使用Terraform自动构建基于AWS EC2的docker主机,然后使用其remote exec选项下载docker文件,构建并运行它

我希望将其与Serverspec集成,但我正在努力解决两件事:

  • 将新创建的AWS EC2实例的外部dns传递给Serverspec的最佳方法

  • 如何为Serverspec配置SSH选项,以便它使用ec2用户帐户在AmazonLinuxAMI上正确执行

  • 我通常使用预定义的密钥对连接到EC2实例,从不使用密码,但是ServerSpec似乎在服务器上以sudo-p格式运行命令

    非常感谢您的建议

    spec_helper.rb的内容

    require 'serverspec'
    require 'net/ssh'
    
    set :ssh_options, :user => 'ec2-user'
    
    还使用如下编辑的rakefile强制更正EC2外部dns(屏蔽):

  • 您可以将IP地址设为一个。实际上,该链接给出了一个示例,用于获取AWS实例的IP地址,在本例中名为
    web

    output "address" {
        value = "${aws_instance.web.public_dns}"
    }
    
    然后,在使用
    地形输出地址应用
    地形后,您可以从命令行获取该值

  • 您可以使用配置选项设置sudo密码:sudo\u password。如果ec2用户无需密码即可运行sudo,请将其设置为“”。(参见示例)或将其传递到SUDO_PASSWORD环境变量中,如下所述:


  • 谢谢你的帮助。我仍在努力找出rakefile和spec_helper.rb中所需的确切内容,以便对单个主机进行简单测试,将Net:SSH user设置为ec2-user。将行set:SSH_options,:user=>'ec2 user'添加到这两个文件中都不起作用。它仍然尝试使用我的mac用户名连接到EC2主机。你能将spec_helper.rb上的内容添加到你的帖子中吗?我用chef inspec替换服务器spec更成功。调用它要容易得多。我确信还有其他的取舍,但是对于我的用例来说,它工作得更好。
    output "address" {
        value = "${aws_instance.web.public_dns}"
    }