Python 连接到gce实例并运行命令
我有一个简单的要求。我想连接到一个已经存在的google计算引擎实例,运行一个命令,然后关闭连接 我使用了伟大的示例代码来创建和删除实例 此外,我有一个运行的启动脚本,它工作得非常好 现在我正在阅读如何使用paramiko连接到我的实例。这可能是最好的,也可能不是,所以如果我走错了路,请纠正我 我有以下示例代码: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
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。