admin 管理员组

文章数量: 1086019

Python 中paramiko模块应用

实现对 SSH 的相关功能,例如:要对服务器进行远程管理的操作,就需要使用此模块

常用方法解释说明:

  • SSHClient:创建用于连接 ssh 服务器的实例
  • paramiko.AutoAddPolicy:设置自动添加主机密钥
  • ssh.connect:连接ssh服务器
  • ssh.exec_command:在ssh 服务器上执行指定命令

安装模块

[root@localhost xxx]# pip3 install paramiko # 使用pip,安装paramiko模块

[root@localhost xxx]# python3
>>> import paramiko  # 导入paramiko,远程连接模块
>>> ssh = paramiko.SSHClient()  # 声明一个远程连接的客户端对象
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置远程连接的提示【类似:ssh 远程连接时,提示'yes/no', 要选择yes的操作】
>>> ssh.connect('127.0.0.1', username='root', password='123456')  # 使用客户端对象ssh,连接服务器【指定服务器的IP地址,用户名和密码】
>>> result = ssh.exec_command('id root; id zhangsan')  # 将结果返回值保存到变量result中,返回值为:输入,输出和错误的类文件对象
>>> result  # 查看变量result中返回值信息【result为元组】
>>> len(result)

>>> result[0]  # 查看元组result中,【输入信息】的类文件对象
>>> result[1]  # 查看元组result中,【输出信息】的类文件对象
>>> result[2]  # 查看元组result中,【错误信息】的类文件对象
>>> out = result[1].read()  # 读取【输出信息】内容,赋值给变量out
>>> err = result[2].read()  # 读取【错误信息】内容,赋值给变量err
>>> out # 查看【输出信息】内容,以bytes字节方式显示
>>> err # 查看【错误信息】内容,以bytes字节方式显示
>>> out.decode() # 查看【输出信息】内容,使用decode(),转换为字符类型
>>> ssh.close() # 断开ssh连接

需求:

  • 创建 SSHClient 实例
  • 设置添加主机密钥策略
  • 连接 ssh 服务器
  • 执行指定命令
  • 在 shell 命令行中接收用于连接远程服务器的密码以及在远程主机上执行的命令

import  paramiko #导入模块parmiko
def rcmd(host, user, passwd, port=22, cmds=None):  # 定义函数rcmd(), 功能:实现ssh的远程连接,port=22 cmds=None 如果不传递参数,则使用默认值
   ssh = paramiko.SSHClient()  # 声明一个远程连接的客户端对象
   ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())  # 设置远程连接的提示【类似:ssh 远程连接时,提示'yes/no', 要选择yes的操作】
   ssh.connect(host, username=user, password=passwd, port=port)  # 使用客户端对象ssh,连接服务器【指定服务器的IP地址,端口,用户名和密码】
   stdin, stdout, stderr = ssh.exec_command(cmds)  # 将元组中的元素,分别赋值给三个变量
   out = stdout.read()  # 读取输出信息和错误信息
   err = stderr.read()
   if out:  # 输出信息out为绿色显示,错误信息err为红色显示
       print('[%s]OUT:\n%s' %(host, out.decode()))
   if err:
       print('[%s]ERROR:\n%s' % (host, err.decode()))
   ssh.close()  # 关闭ssh的连接
if __name__ == '__main__':
# 调用函数,指定服务器IP地址,用户名,密码和要执行的命令,采用默认端口22
   rcmd('127.0.0.1', 'root', '123456', cmds='cat /etc/hosts')

本文标签: Python 中paramiko模块应用