Python 连接到gce实例并运行命令

Python 连接到gce实例并运行命令,python,google-compute-engine,paramiko,Python,Google Compute Engine,Paramiko,我有一个简单的要求。我想连接到一个已经存在的google计算引擎实例,运行一个命令,然后关闭连接 我使用了伟大的示例代码来创建和删除实例 此外,我有一个运行的启动脚本,它工作得非常好 现在我正在阅读如何使用paramiko连接到我的实例。这可能是最好的,也可能不是,所以如果我走错了路,请纠正我 我有以下示例代码: import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy( paramiko.Aut

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

我使用了伟大的示例代码来创建和删除实例

此外,我有一个运行的启动脚本,它工作得非常好

现在我正在阅读如何使用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()
现在-我不确定应该使用哪个用户名或密码

当我运行这段代码时,我不会在我的根目录中获得我想要的文件和目录列表,但我会在默认用户帐户的
主页中获得文件和目录列表,因此它正在连接


我的目标是连接到gce实例,运行命令,就是这样!出于某种原因,这比我预想的要复杂。我在这里做错了什么吗?

如果您面临类似的用例,您可以进行探索。这对我很有效,但我不能评论这是否是最佳实践

我的解决方案如下:

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}

你为什么不从壳里做这个?我不熟悉GCE,但我知道AWS,当你跳到一个新框上时,必须通过
cd.././
访问根目录才能访问根文件。这应该以root身份运行命令:
sudo-S-I-u root-p''pwd
@dmitrypoloskiy是我的答案,这是你想要的吗?对于那些想知道sudo-su为什么的人来说不会持久化到下一个exec_命令,这是因为环境变量不会在paramiko中的exec_命令之间持久化。您需要(如果您想运行多个命令)使用invoke_shell或get_pty。