0
点赞
收藏
分享

微信扫一扫

paramiko模块的使用

兵部尚输 2022-03-21 阅读 83

Paramiko是用python语言写的一个模块,远程连接到Linux服务器,查看上面的日志状态,批量配置远程服务器,文件上传,文件下载等。

paramiko是一个基于SSH用于连接远程服务器并执行相关操作(SSHClient和SFTPClinet,即一个是远程连接,一个是上传下载服务),使用该模块可以对远程服务器进行命令或文件操作,值得一说的是,fabric和ansible内部的远程管理就是使用的paramiko来现实。

ssh是一个协议,OpenSSH是其中一个开源实现,paramiko是Python的一个库,实现了SSHv2协议(底层使用cryptography)。

有了Paramiko以后,我们就可以在Python代码中直接使用SSH协议对远程服务器执行操作,而不是通过ssh命令对远程服务器进行操作。

Paramiko介绍

paramiko包含两个核心组件:SSHClient和SFTPClient。

SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。
首先让我们理清以下几个名词:

pip3 install paramiko

Paramiko基本使用

SSHClient常用的方法介绍

1. connect():

实现远程服务器的连接与认证,对于该方法只有hostname是必传参数。

2. set_missing_host_key_policy():

设置远程服务器没有在know_hosts文件中记录时的应对策略。目前支持三种策略:

3. exec_command():

在远程服务器执行Linux命令的方法。

4. open_sftp():

在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象

利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作.

sftp = client.open_sftp()
sftp.put('local.txt','remote.txt')
import paramiko


def rcmd(host, username, password, port=22, cmd=None):
    # 创建ssh客户端对象
    ssh = paramiko.SSHClient()
    # # 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接 ,此方法必须放在connect方法的前面
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 连接服务器
    ssh.connect(host, username=username, password=password, port=port)
    # 执行命令
    stdin, stdout, stderr = ssh.exec_command(cmd)
    out = stdout.read()
    error = stderr.read()

    # 如果有输出打印输出
    if out:
        print(f"{[host]}\033[32;1m OUT\033[0m:\n{out.decode()}")
    # 如果有错误,打印错误
    if error:
        print(f"{host}\033[31;1m ERROR\033[0m:\n{error.decode()}")

    ssh.close()


if __name__ == '__main__':
    rcmd(host="10.0.0.8", username="root", password="1", cmd="ifconfigd")

参考: https://zhuanlan.zhihu.com/p/313718499

举报

相关推荐

0 条评论