2017-06-04 44 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} 
相關問題