当前位置: 首页 > 面试题库 >

在Python的远程计算机上执行命令

颛孙高义
2023-03-14
问题内容

我正在Ubuntu上用python编写程序,以ls -l在RaspberryPi上执行命令,并与网络连接。

有人可以指导我该怎么做吗?


问题答案:

当然,有几种方法可以做到!

假设您在raspberry.lan主机上安装了Raspberry Pi,并且用户名是irfan

这是运行命令的默认Python库。
您可以使其运行ssh并在远程服务器上执行所需的任何操作。

scrat已在他的回答中提及。如果您不想使用任何第三方库,则绝对应该这样做。
来自这里的简单示例:

import subprocess
import sys

HOST="www.example.org"
# Ports are handled in ~/.ssh/config since we use OpenSSH
COMMAND="uname -a"

ssh = subprocess.Popen(["ssh", "%s" % HOST, COMMAND],
                       shell=False,
                       stdout=subprocess.PIPE,
                       stderr=subprocess.PIPE)
result = ssh.stdout.readlines()
if result == []:
    error = ssh.stderr.readlines()
    print >>sys.stderr, "ERROR: %s" % error
else:
    print result

它完全满足您的要求:通过ssh连接,执行命令,返回输出。无需第三方库。

您也可以使用来自动输入密码/密码pexpect

帕拉米科

paramiko
添加了SSH协议支持的第三方库,因此它可以像SSH客户端一样工作。

连接到服务器,执行并获取ls -l命令结果的示例代码如下所示:

import paramiko

client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('raspberry.lan', username='irfan', password='my_strong_password')

stdin, stdout, stderr = client.exec_command('ls -l')

for line in stdout:
    print line.strip('\n')

client.close()

您也可以使用实现它fabric
Fabric是一种部署工具,可以在远程服务器上执行各种命令。

它通常用于在远程服务器上运行内容,因此您可以轻松地将最新版本的Web应用程序放入,重新启动Web服务器,然后仅需一个命令即可。实际上,您可以在多个服务器上运行相同的命令,这太棒了!

尽管它是作为部署和远程管理工具制作的,但是您仍然可以使用它来执行基本命令。

# fabfile.py
from fabric.api import *

def list_files():
    with cd('/'):  # change the directory to '/'
        result = run('ls -l')  # run a 'ls -l' command
        # you can do something with the result here,
        # though it will still be displayed in fabric itself.

就像在远程服务器上键入cd /和一样ls -l,因此您将在根文件夹中获得目录列表。

然后在外壳中运行:

fab list_files

它将提示输入服务器地址:

No hosts found. Please specify (single) host string for connection: irfan@raspberry.lan

快速说明 :您还可以在fab命令中分配用户名和主机:

fab list_files -U irfan -H raspberry.lan

或者,您可以将主机放入env.hostsfabfile中的变量。这是这样做的方法。

然后将提示您输入SSH密码:

[irfan@raspberry.lan] run: ls -l
[irfan@raspberry.lan] Login password for 'irfan':

然后该命令将成功运行。

[irfan@raspberry.lan] out: total 84
[irfan@raspberry.lan] out: drwxr-xr-x   2 root root  4096 Feb  9 05:54 bin
[irfan@raspberry.lan] out: drwxr-xr-x   3 root root  4096 Dec 19 08:19 boot
...


 类似资料:
  • 问题内容: 如何在golang CLI中的远程计算机上执行命令?我需要编写一个golang CLI,该CLI可以通过密钥SSH到远程计算机并执行shell命令。此外,我需要能够做到这一步。例如,SSH进入一台机器(例如云堡垒),然后SSH进入另一台内部机器并执行shell命令。 我(尚未)找到任何示例。 问题答案: 尝试使用os / exec https://golang.org/pkg/os/e

  • 问题内容: 我试图连接到主机,然后使用“ su-john”更改用户,然后以john身份执行命令。仅使用JSch是否有可能? 问题是在创建会话并打开通道并执行上述命令后,它应该要求输入密码,但没有任何反应。 这是我连接到远程计算机的方式: 然后我通过如下方法执行命令: 当我更改用户时,是否必须创建另一个频道,或者如何使其工作? 因为如果我用 它只执行“ su”命令,但没有完成用户的更改,之后执行“

  • 我实际上想要的是windows环境中等效的非ssh连接。根据要求,我的控制器机器可以使用某种实用程序/协议(如ssh或telnet或rpc或tpc)使用用户名密码连接到远程机器,并且使用此会话,我可以在远程机器上传输文件或执行命令。此连接执行必须在远程计算机不进行任何干预的情况下完成,即,我不需要在远程计算机上安装任何模块或安装任何实用程序,也不需要运行任何脚本。 我的控制器和远程环境都是窗口。

  • 问题内容: 我有两个问题: 有多台远程linux机器,我需要编写一个shell脚本,它将在每台机器上执行相同的命令集。(包括一些sudo操作)。如何使用Shell脚本来完成? 切换到远程计算机时,提示输入RSA指纹认证时如何处理。 远程机器是在运行中创建的VM,我只有它们的IP。因此,我无法事先在这些计算机中放置脚本文件并从我的计算机中执行它们。 问题答案: 有多台远程linux机器,我需要编写一

  • 问题内容: 我有一个python代码在名为A的远程计算机上进行一些计算。我通过名为B的计算机通过A连接到A。是否可以在B的计算机上显示图形? 问题答案: 如果在远程计算机(B)上的Mac OS X上使用matplotlib,则必须首先确保使用基于X11的显示后端之一,因为本机Mac OS X后端无法将其图导出到另一个显示。选择后端可以通过 可以通过提供不正确的后端名称来获得受支持的后端列表:mat

  • 我的设置。我有三台PC:MyComp,Server1和Server2,两个类似的脚本使用调用命令RemTest1.ps1,它在远程Server1上调用RemTest2.ps1。RemTest2 使用 invoke-command 在 Server2 上运行脚本块。我使用的是Powershell版本5.1当我运行脚本从MyComp到Server1时,它工作正常。当我从Server1运行到Server