Blogger Information
Blog 291
fans 0
comment 0
visits 349803
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
Python笔记之paramiko模块安装和使用示例
Original
776 people have browsed it

镜像下载、域名解析、时间同步请点击 阿里云开源镜像站

一、paramiko模块简介

  
paramiko是一个用于做远程控制的模块,使用该模块可以对远程服务器进行命令或文件操作,基于linux中的ssh服务 。paramiko是第三方模块,需要我们单独安装。通过paramiko模块,我们可以利用python代码程序实现对设备的远程控制和文件传输等操作。博文实验环境说明:

  • 操作系统:centos7.6
  • python版本:3.9.12
  • pip版本:22.0.4
  • paramiko版本:2.10.4

二、paramiko安装步骤

1、下载并安装python3

实验环境安装的是当前最新版python3.9.12。安装方式可以参考博文linux之Centos7下安装python3及pip3。

[root@s146 opt]# wget https://www.python.org/ftp/python/3.9.12/Python-3.9.12.tgz

2、安装paramiko

file

实验pip方式安装paramiko可以自动安装相关依赖。

[root@s146 setuptools-62.1.0]# pip3 install paramiko

3、获取paramiko模块帮助

file

三、使用示例

1、基于用户名和密码的 sshclient 方式登录示例

编写程序代码

[root@s146 scripts]# vim test1.py

程序代码如下

  1. # -*- coding: UTF-8 -*-
  2. # This is a test about paramiko
  3. # 实例化一个transport对象
  4. import paramiko
  5. ip = input("请输入需要远程的主机IP地址:")
  6. uname = input("请输入登录用户名:")
  7. pword = input("请输入登录密码:")
  8. # 建立一个sshclient对象
  9. ssh = paramiko.SSHClient()
  10. # 允许将信任的主机自动加入到host_allow 列表,此方法必须放在connect方法的前面
  11. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  12. # 调用connect方法连接服务器
  13. ssh.connect(hostname=ip,port=22,username=uname,password=pword)
  14. # 手动输入待执行命令
  15. mycmd = input("请输入需要执行的命令:")
  16. stdin,stdout,stderr = ssh.exec_command(mycmd)
  17. # 直接执行指定命令
  18. ssh.exec_command('cd /tmp/ && touch paramiko.txt && echo "吴红胜到此一游" > paramiko.txt')
  19. # 结果放到stdout中,如果有错误将放到stderr中
  20. print(stdout.read().decode())
  21. print(stderr.read().decode())
  22. # 关闭连接
  23. ssh.close()

执行命令测试

file

[root@s146 scripts]# python3 test1.py

如上图,可以看到结果正常执行,命令执行结果可以正常接收。

远端服务器检查执行情况

file

[root@s145 tmp]# cat paramiko.txt

吴红胜到此一游

[root@s145 tmp]# ll

total 4

-rw-r–r— 1 root root 22 Apr 27 15:46 paramiko.txt

2、基于用户名和密码的 transport 方式登录示例

编写程序代码

[root@s146 scripts]# vim test2.py

  1. # -*- coding: UTF-8 -*-
  2. # This is a test about paramiko
  3. import paramiko
  4. # 实例化一个transport对象
  5. trans = paramiko.Transport(('192.168.0.145', 22))
  6. # 建立连接
  7. trans.connect(username='root', password='123456')
  8. # 将sshclient的对象的transport指定为以上的trans
  9. ssh = paramiko.SSHClient()
  10. ssh._transport = trans
  11. # 执行命令,和传统方法一样
  12. mycmd1 = input("请输入需要执行的命令一:")
  13. stdin,stdout,stderr = ssh.exec_command(mycmd1)
  14. print(stdout.read().decode())
  15. mycmd2 = input("请输入需要执行的命令二:")
  16. stdin,stdout,stderr = ssh.exec_command(mycmd2)
  17. print(stdout.read().decode())
  18. # 关闭连接
  19. trans.close()

执行程序测试

file

[root@s146 scripts]# python3 test2.py

执行完成命令1后,交换窗口输入命令2

四、QA

  如上执行第二条命令,间隔时间太短会有如下报错。

报错信息

[root@s146 scripts]# python3 test2.py

/usr/local/python3/lib/python3.9/site-packages/paramiko/transport.py:236: CryptographyDeprecationWarning: Blowfish has been deprecated

“class”: algorithms.Blowfish,

请输入需要执行的命令一:ls -l

total 4

-rw———-. 1 root root 1421 Dec 23 11:36 anaconda-ks.cfg

请输入需要执行的命令二:ls -l

total 4

-rw———-. 1 root root 1421 Dec 23 11:36 anaconda-ks.cfg

Exception ignored in: <function BufferedFile.del at 0x7f9c0db51a60>

Traceback (most recent call last):

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/file.py”, line 66, in del

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/channel.py”, line 1392, in close

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/channel.py”, line 991, in shutdown_write

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/channel.py”, line 967, in shutdown

File “/usr/local/python3/lib/python3.9/site-packages/paramiko/transport.py”, line 1908, in _send_user_message

AttributeError: ‘NoneType’ object has no attribute ‘time’

报错原因:上一条命令执行的通道还未关闭,等待关闭即可。

原文链接:https://blog.csdn.net/carefree2005/article/details/124582423

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post