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