连接到 gce 实例和 运行 命令

Connect to gce instance and run command

我有一个简单的要求。我想连接到一个已经存在的 google 计算引擎实例,运行 一个命令,然后关闭连接。

我使用了很棒的示例代码 here 创建和删除实例。

另外,我有一个启动脚本 运行ning 可以完美运行。

现在我正在阅读 this article 使用 paramiko 连接到我的实例。这可能是也可能不是最好的做法,所以如果我走错了路,请纠正我。

我有以下示例代码:

import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(
    paramiko.AutoAddPolicy())

ssh.connect('35.***.***.**',username='user',password='pass')
stdin, stdout, stderr = ssh.exec_command("sudo su -")
stdin, stdout, stderr = ssh.exec_command("ls -l")
stdout.readlines()

现在 - 我不确定应该使用哪个用户名或密码。

当我 运行 这段代码时,我没有得到我想要的根目录中的文件和目录列表,但我确实得到了默认用户帐户 [=12] 中的文件和目录列表=] - 所以它正在连接。

我的目标是连接到一个 gce 实例,运行一个命令,仅此而已!出于某种原因,它比我预期的要棘手。我是不是做错了什么?

如果您遇到类似的用例,可以探索 gcloud ssh。它对我有用,但我无法评论这是否是最佳实践。

我的解决方案如下:

import subprocess
def check_for_completion(instance_name = ""):
    cmd = "gcloud compute ssh  %s --zone=us-east1-b --command=\"sudo -S -i -u root -p '' ls /root/temp/ \""%(instance_name)
    try:
        res = subprocess.check_output(cmd, shell=True)
        items = str(res).split('\n')

        return {'response':items,'complete':False}
    except:
        return {'response':None,'complete':True}