首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在地形上断开远程执行?

如何在地形上断开远程执行?
EN

Stack Overflow用户
提问于 2019-12-21 16:23:42
回答 1查看 358关注 0票数 1

我在我的google云平台中有这个问题,默认的全局用户"gcp-root“与我们的不可接受的用户列表发生冲突。因此,作为解决办法,我要做以下工作:

代码语言:javascript
复制
sudo adduser -u 9999 -G google-sudoers tmproot
sudo cp -Rfvp /home/gcp-root/.ssh /home/tmproot/
sudo chown tmproot:tmproot -Rf /home/tmproot/

下面是我的terraform remote-exec区块:

代码语言:javascript
复制
  ## Create a 'tmproot' as default full sudoer in gcp (gcp-root) has a uid
  ## that conflicts with one of ansible list of users.
  provisioner "remote-exec" {
    inline = [
      "sudo adduser -u 9999 -G google-sudoers tmproot",
      "sudo cp -Rfvp /home/gcp-root/.ssh /home/tmproot/",
      "sudo chown tmproot:tmproot -Rf /home/tmproot/",
    ]

    connection {
      type        = "ssh"
      user        = "gcp-root"
      private_key = "${file("${var.ssh_key_location}")}"
      host        = "${google_compute_address.static-ip-address.address}"
    }
  }

  ## Delete gcp-root
  provisioner "remote-exec" {
    inline = [
      "sudo userdel gcp-root",
    ]

    connection {
      type        = "ssh"
      user        = "tmproot"
      private_key = "${file("${var.ssh_key_location}")}"
      host        = "${google_compute_address.static-ip-address.address}"
    }
  }

当我应用terraform代码时,结果如下:

代码语言:javascript
复制
null_resource.ansible_provisioning: Still creating... [50s elapsed]
null_resource.ansible_provisioning (remote-exec): Connecting to remote host via SSH...
null_resource.ansible_provisioning (remote-exec):   Host: <REDACTED>
null_resource.ansible_provisioning (remote-exec):   User: gcp-root
null_resource.ansible_provisioning (remote-exec):   Password: false
null_resource.ansible_provisioning (remote-exec):   Private key: true
null_resource.ansible_provisioning (remote-exec):   Certificate: false
null_resource.ansible_provisioning (remote-exec):   SSH Agent: false
null_resource.ansible_provisioning (remote-exec):   Checking Host Key: false
null_resource.ansible_provisioning (remote-exec): Connected!
null_resource.ansible_provisioning (remote-exec): ‘/home/gcp-root/.ssh’ -> ‘/home/tmproot/.ssh’
null_resource.ansible_provisioning (remote-exec): ‘/home/gcp-root/.ssh/authorized_keys’ -> ‘/home/tmproot/.ssh/authorized_keys’
null_resource.ansible_provisioning: Provisioning with 'remote-exec'...
null_resource.ansible_provisioning (remote-exec): Connecting to remote host via SSH...
null_resource.ansible_provisioning (remote-exec):   Host: <REDACTED>
null_resource.ansible_provisioning (remote-exec):   User: tmproot
null_resource.ansible_provisioning (remote-exec):   Password: false
null_resource.ansible_provisioning (remote-exec):   Private key: true
null_resource.ansible_provisioning (remote-exec):   Certificate: false
null_resource.ansible_provisioning (remote-exec):   SSH Agent: false
null_resource.ansible_provisioning (remote-exec):   Checking Host Key: false
null_resource.ansible_provisioning (remote-exec): Connected!
null_resource.ansible_provisioning (remote-exec): userdel: user gcp-root is currently used by process 1359


Error: error executing "/tmp/terraform_633887752.sh": Process exited with status 8

所以很明显,问题是第一个远程-exec(使用用户'gcp-root')仍然是连接的,因此,第二个远程-exec(使用用户'tmproot')不能删除'gcp-root‘。

如果我能断开第一个远程管理器的连接,这似乎解决了我的问题,但在terraform的文档中,我似乎没有这个选项。搜索google似乎没有返回任何提示。

我是否有更好的方法来完成我的目标?

任何提示/建议一定会事先表示欢迎和感谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-21 17:38:57

通过在google云平台中添加一个启动脚本元数据,我设法找到了一个可行的解决方案。

在元数据中,我添加了键:

代码语言:javascript
复制
startup-script

具有以下价值:

代码语言:javascript
复制
#!/bin/bash
sudo usermod -u 9999 gcp-root
sudo groupmod -g 9999 gcp-root
sudo chown gcp-root.gcp-root -Rf /home/gcp-root

有关参考,请参见https://cloud.google.com/compute/docs/startupscript

问题解决了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59437891

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档