簡體   English   中英

Python SSH:使用fabric.api替代paramiko

[英]Python SSH: Using fabric.api as alternative to paramiko

我正在嘗試提出一種方法來將Paramiko替換為我目前擁有的許多腳本的SSH客戶端,到目前為止,我提出了此草案進行測試:

ssh_handler.py

import sys
from fabric.api import run
from fabric.api import task
from fabric.api import execute
from fabric.network import disconnect_all


def worker(command):
    run(command)


@task
def cmd(host, command):

    host_list = list()

    if isinstance(host, (str, unicode)):
        host_list.append(host)

    elif isinstance(host, list):
        host_list += host

    else:
        sys.exit(1)

    # run the command
    execute(worker(command), hosts=host_list)

    # disconnect
    disconnect_all()

    return

從另一個腳本執行此操作時,請說:

testing.py

import ssh_handler


node_list = ["192.168.0.1", "192.168.0.2"]

for node in node_list:
    ssh_handler.cmd(node, "uptime")

結果是:

./testing.py
No hosts found. Please specify (single) host string for connection: ^C

有人能指出我正確的方向嗎? 為什么fabric.api.execute在執行期間無法識別hosts參數?


回答:

我可以通過執行以下操作來修復它:

import sys
from fabric.api import run
from fabric.tasks import execute
from fabric.network import disconnect_all


class FabricHelper:
    def __init__(self):
        self.host_list = list()
        pass

    def set_hosts(self, host):

        if isinstance(host, (str, unicode)):
            self.host_list.append(host)
        elif isinstance(host, list):
            self.host_list += host
        else:
            sys.exit(1)
        return

    def cmd(self, command):
        execute(run, command=command, hosts=self.host_list)
        disconnect_all()
        return


if __name__ == "__main__":

    example = FabricHelper()
    example.set_hosts(["10.200.10.51", "10.200.10.52"])
    example.cmd("uptime")

我對您的代碼有些困惑, execute通常用於執行任務。 但是worker不是任務。 工人只是一個班輪,是一個號召運行的電話。 因此在我看來,tat worker可以刪除。

起初,我想知道您正在使用的測試框架是什么,然后我意識到這只是另一個名為test的python文件!

最后,為什么不只在env詞典中設置主機,而不是所有這些復雜的機制?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM