IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python | paramiko的概念及其使用 -> 正文阅读

[Python知识库]Python | paramiko的概念及其使用

本文主要介绍 paramiko 的概念及其使用 123

Last Updated: 2022 / 7 / 16



概念

paramiko 4 是用 python 语言写的一个模块,遵循 SSH2 协议 (底层使用 cryptography ),支持以加密和认证的方式,进行远程服务器的连接。

由于使用的是 python 这样的能够跨平台运行的语言,所以所有 python 支持的平台,如 Linux, Solaris, BSD, MacOS X, Windows等,paramiko 都可以支持,因此,如果需要使用 SSH 从一个平台连接到另外一个平台,进行一系列的操作时,paramiko 是最佳工具之一。

举个常见的例子,现有这样的需求:需要使用 windows 客户端,远程连接到 Linux 服务器,查看上面的日志状态,大家通常使用的方法会是:

  1. telnet ;
  2. PUTTY ;
  3. WinSCP ;
  4. XManager 等;

那现在如果需求又增加一条,要从服务器上下载文件,该怎么办?那常用的办法可能会是:

  1. Linux 上安装 FTP 并配置 ;
  2. Linux 上安装 Sambe 并配置 ;

大家会发现,常见的解决方法都会需要对远程服务器必要的配置,如果远程服务器只有一两台还好说,如果有N台,还需要逐台进行配置,或者需要使用代码进行以上操作时,上面的办法就不太方便了。

使用 paramiko 可以很好的解决以上问题。比起前面的方法,它仅需要在本地上安装相应的软件(python 以及 PyCrypto ),对远程服务器没有配置要求,对于连接多台服务器,进行复杂的连接操作特别有帮助,可以在 Python 代码中直接使用 SSH 协议对远程服务器执行操作,而不是通过 ssh 命令对远程服务器进行操作,比如连接远程服务器、执行命令和上传、下载文件的功能。。


安装

安装 paramiko 有两个先决条件,python 和另外一个名为 PyCrypto 的模块。

通常安装标准的 python 模块,只需要在模块的根目录下运行:

python setup.py build
python setup.py install

或者,

pip install xxx

paramikoPyCrypto 也不例外,唯一麻烦的就是安装 PyCrypto 时,需要 GCC 库编译,如果没有 GCC 库会报错,会导致 PyCrypto 以及 paramiko 无法安装。

windows

以下以32 位的 windows XP 为例,说明 paramiko 的安装过程:

  1. 安装python,2.2 以上版本都可以,安装过程略,并假设安装目录是 c:\python ;
  2. 判断本地是否安装了 GCC,并在 PATH 变量可以找到。
    如果没有,可使用 windows 版的 GCC,即 MinGW,下载地址为 http://sourceforge.net/projects/mingw/,然后运行下载后的 exe 文件进行网络安装,假设目录为 C:\mingw,在 PATH 中加入 C:\mingw\bin,并在 c:\python\lib\distutils 下新建一个名称是 distutils.cfg 的文件,填入:
[build] 
compiler=mingw32
  1. 下载 PyCrypto ,地址是 https://www.dlitz.net/software/pycrypto/
    安装PyCrypto的步骤为,解压缩,在 dos 下进入解压缩的目录,运行
C:\python\python.exe setup.py build
C:\python\python.exe setup.py install

测试 paramiko, 运行 python.exe,在提示符下输入 Import paramiko。如果没有出现错误提示,说明 paramiko 安装成功


使用

单线程

SSH

连接

SSHClient
client = paramiko.SSHClient.connect(
	hostname,
	port=SSH_PORT,
	username=None,
	password=None,
	pkey=None,
	key_filename=None,
	timeout=None,
	allow_agent=True,
	look_for_keys=True,
	compress=False,
	sock=None,
	gss_auth=False,
	gss_kex=False,
	gss_deleg_creds=True,
	gss_host=None,
	banner_timeout=None,
	auth_timeout=None,
	gss_trust_dns=True,
	passphrase=None,
	disabled_algorithms=None,
)
  • hostname
    连接的目标主机
  • port=SSH_PORT
    指定端口 5
  • username=None
    验证的用户名
  • password=None
    验证的用户密码
  • pkey=None
    私钥方式用于身份验证
  • key_filename=None
    一个文件名或文件列表,指定私钥文件
  • timeout=None
    可选的 tcp 连接超时时间
  • allow_agent=True
    是否允许连接到 ssh 代理,默认为 True 允许
  • look_for_keys=True
    是否在 ~/.ssh 中搜索私钥文件,默认为 True 允许
  • compress=False
    是否打开压缩

Transport
t = paramiko.Transport((“主机”,”端口”))
t.connect(username = “用户名”, password = “口令”)
# 如果连接远程主机需要提供密钥,上面第二行代码可改成:
# t.connect(username = “用户名”, password = “口令”, hostkey=”密钥”)

应对策略

ssh.set_missing_host_key_policy()

设置连接的远程主机没有本地主机密钥或 HostKeys 对象时的策略,目前支持三种:

  • AutoAddPolicy
    自动添加主机名及主机密钥到本地 HostKeys 对象,不依赖load_system_host_key 的配置。即新建立 ssh 连接时不需要再输入 yesno 进行确认;
  • WarningPolicy
    用于记录一个未知的主机密钥的 python 警告。并接受,功能上和 AutoAddPolicy 类似,但是会提示是新连接;
  • RejectPolicy
    自动拒绝未知的主机名和密钥,依赖 load_system_host_key 的配置。此为默认选项;

执行命令

exec_command(
	command,
    bufsize=-1,
    timeout=None,
    get_pty=False,
    environment=None,
)
  • command
    可以任意 linux 支持的命令,如一些常用的命令
    cp - 复制代码
    df - 查看磁盘使用情况
    uptime - 显示系统运行时间信息
    cat - 显示某文件内容
    mv/cp/mkdir/rmdir - 对文件或目录进行操作
    /sbin/service/ xxxservice start/stop/restart - 启动、停止、重启某服务
    netstat -ntl |grep 8080 - 查看 8080 端口的使用情况
    nc -zv localhost - 查看所有端口的使用情况
    find / -name XXX - 查找某文件
    'cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c' 6 - 查看 CPU model型号

示例

参考此处 27

client = paramiko.SSHClient()				
# 实例化SSHClient,新建client对象

client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接

client.connect(hostname='192.168.1.1', port=22, username='root', password='123456')
# 连接SSH服务端,以用户名和密码进行认证

stdin, stdout, stderr = client.exec_command('df -h ') 
# stdout 为正确输出,stderr为错误输出,同时是有1个变量有值
# 打开一个Channel并执行命令

print(stdout.read().decode('utf-8'))
# print(stdout.readlines())
# 打印执行结果

client.close()
# 关闭SSHClient

stdin 无法被 read(),它是 input, 而非 output,否则将会报出 "File is not open for reading" 8


sftp

参考此处 37

示例

if __name__ == '__main__':
    transport = paramiko.Transport(('10.50.10.150',22)) 
    # 创建传输对象
    
    transport.connect(username='kali',password='kali') 
    # 建立连接
    
    sftp = paramiko.SFTPClient.from_transport(transport) 
    # 将实例Transport作为参数传入SFTPClient中
    
    sftp.put(r'E:\Users\Desktop\test.txt','/opt/test1.txt') 
    # 将本地桌面test.txt文件上传至虚拟机opt目录下
    
    sftp.get('/opt/test2.txt',r'E:\Users\Desktop\test2.txt') 
    # 将虚拟机opt目录下test2.txt下载到本地桌面
    
    transport.close() #关闭连接

f’ ‘:格式化
r’ ‘:去除转义
b’ ‘:指定为字节类型
u’ ':指定为Unicode编码


多线程

SSH

#!/usr/bin/env python3
import sys
import paramiko
import threading
import os

def remote_comm(host, pwd, command):
    '''
    创建函数实现远程连接主机、服务器密码以及在远程主机上执行的命令的功能
    :param host:
    :param pwd:
    :param command:
    :return:
    '''
    ssh = paramiko.SSHClient()
    # 创建用于连接ssh服务器的实例
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 设置自动添加主机密钥

    try:
       ssh.connect(hostname=host, username='root', password=pwd)
       # 连接ssh服务器,添加连接的主机、用户名、密码填好,捕获异常,有异常则跳出函数
    except:
       return

    stdin, stdout, stderr = ssh.exec_command(command)
    # 在ssh服务器上执行指定命令,返回3项类文件对象,分别是,输入、输出、错误
    out = stdout.read()                             # 读取输出
    error = stderr.read()                           # 读取错误
    if out:                                         # 如果有输出
        print('[%s] OUT:\n%s' % (host, out.decode('utf8')))
        # 打印主机输出内容
    if error:                                       # 如果有错误
        print('[%s] ERROR:\n%s' % (host, error.decode('utf8')))
        # 打印主机错误信息
    ssh.close()                                     # 程序结束

if __name__ == '__main__':
    if len(sys.argv) != 3:
    # 设定sys.argv长度,确保remote_comm函数中参数数量
        print('Usage: %s ipaddr_file "command"' % sys.argv[0])
        exit(1)
    if not os.path.isfile(sys.argv[1]):
    # 判断命令行上输入如果不是文件,确保输入的是文件
        print('No such file:', sys.argv[1])
        exit(2)
    fname = sys.argv[1]
    # fname为存储远程主机ip的文件,用sys.argv方法,可以在执行脚本时再输入文件名,更为灵活
    command = sys.argv[2]
    # command为在远程主机上执行的命令,用sys.argv方法,可以在执行脚本时再输入相应命令,command为remote_comm函数第三个参数
    # 通过getpass输入远程服务器密码,pwd为remote_comm函数第二个参数
    # pwd = getpass.getpass()
    pwd='Taren1.bgsn'

    with open(fname) as fobj:
    # 打开存有远程主机ip的文件
        ips = [line.strip() for line in fobj]
        # 将遍历文件将ip以列表形式存入ips,line.strip()可以去掉每行ip后
        for ip in ips:
        # 循环遍历列表,获取ip地址,ip为remote_comm函数第一个参数
        # 将读取到的ip地址作为remote_comm函数实际参数传递给函数,ips中有几个ip地址循环几次
            t = threading.Thread(target=remote_comm, args=(ip, pwd, command))
            # 创建多线程
            t.start()
            # 启用多线程

详情需参考此处 2


参考链接


  1. python使用paramiko实现ssh的功能详解 ??

  2. paramiko模块怎么在Python项目中使用 ?? ?? ??

  3. paramiko的安装与使用 ?? ??

  4. paramiko ??

  5. IP地址、MAC地址以及端口号 ??

  6. python执行linux命令并获取返回值 ??

  7. paramiko模块使用方法(十二) ?? ??

  8. Can’t get stderr with Paramiko ??

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-17 16:19:02  更:2022-07-17 16:19:52 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 1:03:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计