“Paramiko的使用”的版本间的差异
来自CloudWiki
第101行: | 第101行: | ||
参考文档:https://www.cnblogs.com/xiao-apple36/p/9144092.html | 参考文档:https://www.cnblogs.com/xiao-apple36/p/9144092.html | ||
+ | |||
+ | https://developer.51cto.com/art/201910/604700.htm |
2020年5月23日 (六) 09:04的版本
Paramiko的使用
安装
pip install paramiko
pip会自动安装Paramiko所依赖的包。如果要离线安装,则先使用pip下载。
mkdir paramiko && cd paramiko #创建一个目录存放安装包 pip download paramiko #下载到paramiko中,并传输至离线环境 pip install paramiko –no-index -f paramiko #离线环境下在目录paramiko中检索安装包
基于用户名和密码的SSHClient方式登录
编程步骤如下:
(1)初始化一个SSHClient类的实例。
(2)调用connect方法连接远程主机。
(3)执行命令获取输出结果和返回值,关闭连接。
# -*- coding: utf-8 -*- # File Name: paramiko_user_pwd.py # Description: 使用用户名密码来登陆并执行远程命令 import paramiko # 建立一个sshclient对象 ssh = paramiko.SSHClient() # 将信任的主机自动加入到host_allow列表,须放在connect方法前面 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 调用connect方法连接服务器 ssh.connect(hostname="192.168.1.3", port=22, username="root", password="000000") # 执行命令 stdin, stdout, stderr = ssh.exec_command("echo `date` && df -hl") # 结果放到stdout中,如果有错误将放到stderr中 print(stdout.read().decode('utf-8')) # returncode = stdout.channel.recv_exit_status() print("returncode:",returncode) # 关闭连接 ssh.close()
运行结果:
[root@localhost op]# python3 paramiko_user_pwd.py
Sat May 23 16:26:31 CST 2020 Filesystem Size Used Avail Use% Mounted on devtmpfs 979M 0 979M 0% /dev tmpfs 991M 0 991M 0% /dev/shm tmpfs 991M 9.6M 981M 1% /run tmpfs 991M 0 991M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 2.3G 15G 14% / /dev/sda1 1014M 139M 876M 14% /boot tmpfs 199M 0 199M 0% /run/user/0 returncode: 0
本方法是传统的连接服务器、执行命令、关闭一个操作,有时候需要登录上服务器执行多个操作,如执行命令、上传/下载文件,该方法则无法实现,可以通过下面的方法来操作。
基于用户名和密码的Transport方式登录并实现上传与下载
步骤:
(1)实例化一个Transport的实例,并调用connect方法连接远程主机。
(2)实例化一个SSHClient的实例,指定其_transport为步骤1的实例。
(3)实例化一个sftp对象,指定连接的通道为步骤1的实例。
(4)执行命令或sftp上传下载命令。
(5)关闭连接。
# -*- coding: utf-8 -*- #Time: 2018/8/23 22:07:12 #Description: 实现上传和下载功能 #File Name: transport_upload_download.py import paramiko trans = paramiko.Transport(('192.168.1.3', 22)) # 建立连接,指定SSHClient的_transport trans.connect(username='root', password='000000') ssh = paramiko.SSHClient() ssh._transport = trans # 执行命令,和传统方法一样 stdin, stdout, stderr = ssh.exec_command('echo `date` && df -hl') print(stdout.read().decode('utf-8')) # 实例化一个 sftp对象,指定连接的通道 sftp = paramiko.SFTPClient.from_transport(trans) # 发送文件 sftp.put(localpath='./transport_upload_download.py', remotepath='/tmp/transport_upload_download_tmp.py') # 下载文件 sftp.get(localpath='./tmp/transport_upload_download.py', remotepath='/tmp/transport_upload_download_tmp.py') stdin, stdout, stderr = ssh.exec_command('ls -ltr /tmp') print(stdout.read().decode('utf-8')) # 关闭连接 trans.close()