没有fabfile的结构 - 运行和sudo给出错误,但不是本地的

时间:2013-05-09 07:41:27

标签: python ssh fabric

您好我在python脚本中使用以下代码(不是从命令行运行fab),当我将local更改为runsudo时,在A行,它给了我错误像:

  

找不到主机。请指定(单个)主机字符串以进行连接:

代码是:

env.host = "XXXX"
env.user = "XXX"

def execute():
    local('uname -a')   ### A : changing this gives error ###       

execute()

我的目标是ssh到一台host机器。

2 个答案:

答案 0 :(得分:8)

根据结构docs,如果你从python脚本调用任务 - 你应该使用fabric.tasks.execute

from fabric.tasks import execute
from fabric.api import *

env.user = "XXX"

def execute_task():
    sudo('uname -a')

execute(execute_task, host="XXX")

希望有所帮助。

答案 1 :(得分:0)

为什么不使用paramiko

import sys
import traceback

import paramiko

paramiko.util.log_to_file('session.log')

username = 'someuser'
port = 22
hostname = 'foo.bar.com'

try:
    client = paramiko.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.WarningPolicy)
    client.connect(hostname, port, username, password)
    chan = client.invoke_shell()
    print repr(client.get_transport())
    print '*** Here we go!'
    print
    interactive.interactive_shell(chan)
    chan.close()
    client.close()

except Exception, e:
    print '*** Caught exception: %s: %s' % (e.__class__, e)
    traceback.print_exc()
    try:
        client.close()
    except:
        pass
    sys.exit(1)