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用户的多个剧本_Ssh_Vagrant_Ansible - Fatal编程技术网

多个ssh用户的多个剧本

多个ssh用户的多个剧本,ssh,vagrant,ansible,Ssh,Vagrant,Ansible,我正在尝试使用vagrant的ansible provisioner提供vm。但我有两个剧本,都需要使用不同的ssh用户。我的用例是这样的,我有一个预设置脚本,它在默认设置的vagrantssh用户下运行。然后,我的预配置脚本添加了一个不同的ssh用户provisioner,该用户被设置为使用自己的密钥ssh到VM上。实际的供应脚本有一个任务,该任务删除系统上不安全的流浪用户,因此它必须作为不同的ssh用户运行,provisioner,即预供应器创建的用户 我不知道如何更改文件中的ssh用户。下

我正在尝试使用vagrant的ansible provisioner提供vm。但我有两个剧本,都需要使用不同的ssh用户。我的用例是这样的,我有一个预设置脚本,它在默认设置的
vagrant
ssh用户下运行。然后,我的预配置脚本添加了一个不同的ssh用户
provisioner
,该用户被设置为使用自己的密钥ssh到VM上。实际的供应脚本有一个任务,该任务删除系统上不安全的流浪用户,因此它必须作为不同的ssh用户运行,
provisioner
,即预供应器创建的用户

我不知道如何更改文件中的ssh用户。下面的例子是我取得的成绩。尽管更改了
config.ssh.username
vagrant,但它始终将ssh用户设置为最后一个值,在本例中为
provisioner
,并且在运行预设置脚本时不会进行身份验证,因为它尚未创建

我可以以某种方式覆盖ssh用户吗?可能在
do | ansible |
块(下面)中有一个ansible变量本身

我想要达到的目标可能吗?这看起来很简单,我很震惊我有这么多的麻烦

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box = "base_box"
  config.vm.box_url = "s3://bucket/base-box/base.box"
  config.vm.network "private_network", ip: "10.0.3.10"
  config.ssh.keep_alive = true
  config.vm.define "vagrant_image"

  config.vm.provision "ansible" do |ansible_pre|
    config.ssh.username = "vagrant"
    ansible_pre.playbook = "provisioning/pre_provisioning.yml"
    ansible_pre.host_vars = {
      "vagrant_image" => {
        "ansible_host" => "127.0.0.1",
      }
    }
    ansible_pre.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
  end

  config.vm.provision "ansible" do |ansible|
    config.ssh.username = "provisioner"
    ansible.playbook = "provisioning/provisioning.yml"
    ansible.host_vars = {
      "vagrant_image" => {
        "ansible_host" => "127.0.0.1",
      }
    }
    ansible.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
  end
end

(如果你想知道s3框url只起作用,因为我安装了
vagrant-s3auth(1.3.2)
插件)

你可以在几个地方设置它。Vagrantfile(但不是
config
,它将被覆盖),通过Ansible外部变量:

  config.vm.provision "ansible" do |ansible_pre|
    ansible_pre.playbook = "provisioning/pre_provisioning.yml"
    ansible_pre.host_vars = {
      "vagrant_image" => {
        "ansible_host" => "127.0.0.1",
      }
    }
    ansible_pre.extra_vars = {
        ansible_user: "vagrant"
    }
    ansible_pre.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
  end

  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "provisioning/provisioning.yml"
    ansible.host_vars = {
      "vagrant_image" => {
        "ansible_host" => "127.0.0.1",
      }
    ansible.extra_vars = {
        ansible_user: "provisioner"
    }
    ansible.raw_ssh_args = "-i /path/to/private/key/id_rsa"
    ansible.vault_password_file = ENV['ANSIBLE_VAULT_PASSWORD_FILE']
  end

但你也可以编写一个剧本,在里面切换用户。请参见
ansible\u user
和。

谢谢,这与我最后所做的类似。我将
“ansible\u ssh\u user”=>“vagrant”
添加到主机变量。这句话和下面的几行字搭配在一起让我完成了。config.ssh.insert_key=false config.ssh.private_key_path=[“~/.ssh/id\u rsa-provisioner”、“~/.vagrant.d/unsecure_private_key”]您还可以在Vagrantfile中的
raw_ssh参数
选项中指定密钥(我添加了一个示例)。