我想我在下面的脚本中缺少一个步骤。
我第一次运行它,就可以很好地创建VM,但是拒绝连接。即使我在创建虚拟机后等待了十分钟,它仍然被拒绝。
但是,如果我使用GCP控制台手动连接“在浏览器窗口中打开”,则会收到消息“正在传输SSH密钥...”,并且连接正常。完成此步骤后,脚本可以正常连接。
我应该在此脚本中添加些什么,以使其能够正常工作而不必从控制台手动连接?
#!/bin/bash
MY_INSTANCE="janne"
MY_TEMPLATE="dev-tf-nogpu-template"
HOME_PATH="/XXX/data/celeba/"
# Create instance
gcloud compute instances create $MY_INSTANCE --source-instance-template $MY_TEMPLATE
# Start instance
gcloud compute instances start $MY_INSTANCE
# Copy needed directories & files
gcloud compute scp ${HOME_PATH}src/ $MY_INSTANCE:~ --recurse --compress
gcloud compute scp ${HOME_PATH}save/ $MY_INSTANCE:~ --recurse --compress
gcloud compute scp ${HOME_PATH}pyinstall $MY_INSTANCE:~
gcloud compute scp ${HOME_PATH}gcpstartup.sh $MY_INSTANCE:~
# Execute startup script
gcloud compute ssh --zone us-west1-b $MY_INSTANCE --command "bash gcpstartup.sh"
# Connect over ssh
gcloud compute ssh --project XXX --zone us-west1-b $MY_INSTANCE
此脚本的完整输出为:
(base) xxx@ubu-dt:/XXX/data/celeba$ bash gcpcreate.sh
Created [https://www.googleapis.com/compute/v1/projects/XXX/zones/us-west1-b/instances/janne].
NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS
janne us-west1-b n1-standard-1 XXX XXX RUNNING
Starting instance(s) janne...done.
Updated [https://compute.googleapis.com/compute/v1/projects/xxx/zones/us-west1-b/instances/janne].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
lost connection
ERROR: (gcloud.compute.scp) [/usr/bin/scp] exited with return code [1].
ssh: connect to host 34.83.3.161 port 22: Connection refused
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
ssh: connect to host 34.83.3.161 port 22: Connection refused
ERROR: (gcloud.compute.ssh) [/usr/bin/ssh] exited with return code [255].
编辑:添加gcloud版本信息
(base) bjorn@ubu-dt:/media/bjorn/data/celeba$ gcloud version
Google Cloud SDK 269.0.0
alpha 2019.10.25
beta 2019.10.25
bq 2.0.49
core 2019.10.25
gsutil 4.45
kubectl 2019.10.25
答案 0 :(得分:1)
我找到的解决方案是:等待。
对于OS登录,SSH在实例启动后约20秒钟开始工作。 对于非OS登录,大约需要一分钟。
所以我只是在gcloud计算实例开始$ MY_INSTANCE
之后添加了它[TestFixture(typeof(int), "abc", "xyz")]
public class GenericTestFixture<T>
{
private readonly string _aa;
private readonly string _bb;
public GenericTestFixture(string a, string b)
{
_aa = a;
_bb = b;
}
[Test]
public void Test1()
{
Debug.WriteLine($"aa is {_aa}, bb is {_bb}, t is {typeof(T)}");
}
[TestCase(1)]
public void TestMethod(int c)
{
Assert.AreEqual(c, 1);
}
}
答案 1 :(得分:0)
通过控制台连接时,它将为您管理密钥。
您的最新评论使我相信,当您从控制台连接时,您正在生成SSH密钥,并且它以某种方式允许您运行脚本,我建议您看一下如何管理SSH keys在元数据中创建并创建自己的SSH密钥以通过SDK进行访问。
如果通过SDK在脚本之外,您也无法直接进行SSH,那么我认为这是由于生成密钥的相同原因。
还请确保在使用SDK时,服务帐户具有正确的权限。
让我知道。