【问题标题】:Fabric execute with SSH key?Fabric 使用 SSH 密钥执行?
【发布时间】:2016-05-07 03:04:32
【问题描述】:

如何在不使用fab 实用程序的情况下执行命令?

测试用例

from fabric.api import execute, run


def hostname():
    return run('hostname')


if __name__ == '__main__':
    execute(hostname, my_env={'key_filename': 'public_key_path'},
            hosts='{user}@{ip}'.format(user='ubuntu', ip='ip address here'))

错误

TypeError: hostname() takes no arguments (1 given)

【问题讨论】:

    标签: python python-2.7 ssh fabric python-2.x


    【解决方案1】:

    您的解决方案是正确的,使用execute 以编程方式运行任务。错误

    TypeError: hostname() takes no arguments (1 given)
    

    表示你的函数不接受参数,即my_env

    只需修改为:

    def hostname(my_env):
        return run('hostname')
    

    它会起作用的。

    【讨论】:

    • 啊,我明白了。谢谢。通过env,上下文管理器的正确方法是什么?
    • 你不必passing through envenv 可以从任何地方访问。
    • 太棒了。也将其附加到您的答案中:)
    【解决方案2】:

    我已经寻找了一天的答案。感谢提问者。他/她给出提示。而完整的解决方案是这样的:

    execute(hostname, hosts="{ip}", my_env={'key_filename': '~/.ssh/{pub_key}.pem', 'user' : 'ec2-user'})
    
    def hostname(my_env):
        return run('hostname')
    

    经过测试,它适用于我的 AWS 实例。

    【讨论】:

      猜你喜欢
      • 2012-09-06
      • 1970-01-01
      • 2019-02-26
      • 2019-02-12
      • 1970-01-01
      • 2021-06-06
      • 2021-09-16
      • 2021-09-10
      • 1970-01-01
      相关资源
      最近更新 更多