📜  如何使用Python在远程机器上执行 Shell 命令 – Paramiko

📅  最后修改于: 2022-05-13 01:54:42.853000             🧑  作者: Mango

如何使用Python在远程机器上执行 Shell 命令 – Paramiko

Paramiko是一个Python库,它通过 SSh 与远程设备建立连接。 Paramiko 使用 SSH2 作为 SSL 的替代品,以在两个设备之间建立安全连接。它还支持 SFTP 客户端和服务器模型。

验证 SSH 连接

要验证 SSH 连接,我们需要设置一个私有的 RSA SSH 密钥(不要与 OpenSSH 混淆)。我们可以使用以下命令生成密钥:

这将提示我们为我们的密钥提供一个名称。随意命名并生成公钥/私钥 rsa 密钥对。输入您希望用来保存密钥的名称。

接下来,系统会提示您提供密码(请随意将其留空)。

现在我们有了我们的密钥,我们需要将它复制到我们的远程主机。最简单的方法是使用ssh-copy-id

如果您想检查您已经拥有哪些密钥,可以在系统的.ssh目录中找到这些密钥:

我们正在寻找以以下标题开头的键:

SSH(Secure Shell)是SSH协议中使用的访问凭证。换句话说,它是一种加密网络协议,用于通过网络传输加密数据。它允许您连接到一台或多台服务器,而无需记住或输入要从一个系统远程登录到另一个系统的每个系统的密码。

安装Paramiko

要安装 paramiko 库,请在命令提示符下运行后续命令。 paramiko 需要密码学作为依赖模块。所以在命令提示符下运行这两个命令:

注意:有关更多信息,请参阅在 Windows 和 Linux 上安装 Paramiko

安装完成后,现在我们将使用 paramiko 库连接到远程 SSH 服务器。下面给出了等效的代码片段:

Python3
import paramiko
  
# Create object of SSHClient and 
# connecting to SSH
ssh = paramiko.SSHClient()
ssh.connect('1.1.1.2', port=22, username='UserName',
            password='PassWord', timeout=3)
  
# Adding new host key to the local 
# HostKeys object(in case of missing)
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  
# Execute command on SSH terminal 
# using exec_command
stdin, stdout, stderr = ssh.exec_command('show ip interface brief')


Python3
import paramiko
output_file = 'paramiko.org'
  
  
def paramiko_GKG(hostname, command):
    print('running')
    try:
        port = '22'
          
        # created client using paramiko
        client = paramiko.SSHClient()
          
        # here we are loading the system 
        # host keys
        client.load_system_host_keys()
          
        # connecting paramiko using host 
        # name and password
        client.connect(hostname, port=22, username='geeksForgeeks',
                       password='geeksForgeeks')
          
        # below line command will actually 
        # execute in your remote machine
        (stdin, stdout, stderr) = client.exec_command(command)
          
        # redirecting all the output in cmd_output 
        # variable
        cmd_output = stdout.read()
        print('log printinf: ', command, cmd_output)
          
        # we are creating file which will read our 
        # cmd_output and write it in output_file
        with open(output_file, "w+") as file:
            file.write(str(cmd_output))
              
        # we are returning the output
        return output_file
    finally:
        client.close()
  
  
paramiko_GKG('10.10.10.1', 'uname')


以此为基础,只需使用一个Python脚本,就可以自动完成登录远程SSH服务器、执行命令和捕获结果的工作。

通过这种方式,您可以从应用程序中创建到另一台主机的 SSH 连接,通过此连接,您可以将命令发送到主机并检索输出。

下面给出的是一个描述相同的程序。这里我们打印用户名。

程序:

蟒蛇3

import paramiko
output_file = 'paramiko.org'
  
  
def paramiko_GKG(hostname, command):
    print('running')
    try:
        port = '22'
          
        # created client using paramiko
        client = paramiko.SSHClient()
          
        # here we are loading the system 
        # host keys
        client.load_system_host_keys()
          
        # connecting paramiko using host 
        # name and password
        client.connect(hostname, port=22, username='geeksForgeeks',
                       password='geeksForgeeks')
          
        # below line command will actually 
        # execute in your remote machine
        (stdin, stdout, stderr) = client.exec_command(command)
          
        # redirecting all the output in cmd_output 
        # variable
        cmd_output = stdout.read()
        print('log printinf: ', command, cmd_output)
          
        # we are creating file which will read our 
        # cmd_output and write it in output_file
        with open(output_file, "w+") as file:
            file.write(str(cmd_output))
              
        # we are returning the output
        return output_file
    finally:
        client.close()
  
  
paramiko_GKG('10.10.10.1', 'uname')

输出:

$ python GFG_paramiko.py
running
[log printing: ,'uname','Linux\n']

因此,通过运行我们的Python文件,我们得到了一个带有 uname 命令和 Linux 作为输出的打印语句。可以针对不同的命令修改相同的程序以根据需要获取信息。