1

我在 Go 中有测试代码,它在 Compute Engine 实例上设置了一个状态(并且不想公开端口)。由于似乎没有直接在 Golang 中执行此操作的简单方法,因此我使用gcloud

func TestMe(t *testing.T) {
  cmd := exec.Command("gcloud", "compute", "ssh", "--project", "foo", "--tunnel-through-iap", "--zone", "europe-west1-z", "bar", `--ssh-flag="-T"`, "--", "echo WOW")
  cmd.Env = os.Environ()
  out, err := cmd.CombinedOutput()
  println(string(out))
  t.Fatal(err)
}

运行时go testcmd输出:

bash: myuser@compute.123456789: command not found

计算实例是正确的 - 但尝试访问计算实例时出现故障。相同的 gcloud 命令适用于 bash(即使对于非交互式)。我认为 Golang 环境中有些不同。

4

1 回答 1

0

代码中有一个小的更正。

更正的代码:

func TestMe(t *testing.T)
 {
 cmd := exec.Command("gcloud", "compute", "ssh", "--project", "foo", "--tunnel-through-iap", "--zone", "europe-west1-z", "bar", "--ssh-flag=-T", "--", "echo WOW") 
cmd.Env = os.Environ()
 out, err := cmd.CombinedOutput() 
println(string(out)) 
t.Fatal(err) 
}

有关解决 ssh 问题的更多信息,您可以参考文档

于 2022-01-11T10:19:52.900 回答