2017-06-04 28 views
0

私は簡単なリクエストをしています。私はすでに存在するGoogle Compute Engineインスタンスに接続し、コマンドを実行して接続を終了したいと考えています。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

何らかの理由:ここ

私のソリューションは、以下のようなものでしたか?私はGCEに精通していませんが、AWSで、新しいボックスを開くときにルートディレクトリにアクセスするには '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} 
関連する問題