【问题标题】:SSH a linux box using subprocess moduleSSH 使用子进程模块的 linux 机器
【发布时间】:2012-05-30 11:50:35
【问题描述】:

我有一个要求,我需要执行以下操作

我需要 ssh 到一个 linux 机器,运行一个命令,取回输出,我需要做一些操作。

这可以通过 python 子进程模块实现吗?

基本上我需要一个 .py 代码,我将在其中提供 IP 地址、用户名和密码以连接到 linux 机器并运行命令并获取输出。

这也可以通过 Python 中可用的任何其他模块实现。

欢迎提出建议。

【问题讨论】:

标签: python subprocess fabric paramiko pexpect


【解决方案1】:

您的问题被标记为“paramiko”,那么您为什么不直接使用它呢?

我需要 ssh 到一个 linux 机器,运行一个命令,获取输出并返回 我需要做一些操作。

ssh 到 linux 机器(或任何其他 ssh 服务器):

>>> import paramiko
>>> ssh=paramiko.SSHClient()
>>> ssh.load_system_host_keys()
>>> ssh.connect(hostname='localhost', username='haiprasan86', password='secret')
>>> print ssh
<paramiko.SSHClient object at 0xdf2590>

运行命令:

>>> _, out, err = ssh.exec_command('ls -l /etc/passwd')
>>> # block until remote command completes
>>> status = out.channel.recv_exit_status()
>>> print status
0

取回输出:

>>> print out.readlines()
['-rw-r--r--. 1 root root 2351 Mar 27 10:57 /etc/passwd\n']

我不知道你想做什么操作。

【讨论】:

    【解决方案2】:

    如果它只是一个命令,你可以简单地将它附加到命令行:

    ssh user@host "echo foo"
    

    然后会返回 foo.如果您在远程主机的~/.ssh/authorized_keys 文件中将ssh-agent 与您的公钥一起使用,那么您甚至不需要询问密码。

    【讨论】:

      【解决方案3】:

      其他选项为fabric,或者如果您需要与远程命令交互,则为fexpect

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-18
        相关资源
        最近更新 更多