2017-06-04 18 views
0

我有一个简单的请求。我想连接到一个已经存在的Google计算引擎实例,运行一个命令并关闭连接。连接到gce实例并运行命令

我已经使用伟大的示例代码here来创建和删除实例。

此外,我有一个启动脚本运行完美的作品。

现在我在阅读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() 

现在 - 我不知道我应该使用哪一个用户名和密码。

当我运行此代码时,我没有根据需要获取根目录中的文件和目录列表,但是我获取了默认用户帐户的home中的文件和目录列表 - 因此它正在连接。

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

+0

你不是从shell这样做的原因吗?我对GCE并不熟悉,但是我知道,当你在新盒子上跳转时,根目录必须通过'cd ../../'来访问根文件来访问。 –

+0

这应该以root身份运行命令:'sudo -S -i -u root -p''pwd' – hurturk

+0

@DmitryPolonskiy我的回答是你的想法? –

回答

0

如果您正面临类似的使用案例,您可以探索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} 
相关问题