Python的paramiko模块,基于SSH用于连接远程服务器并执行相关操作; paramiko遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接;
paramiko支持Linux,Solaris, BSD,MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台;
利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。
模块使用
1、执行命令 - 用户名+密码
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 允许连接know_hosts中不存在的主机
ssh.connect('10.255.1.42',22,'root','123456')
stdin,stdout,stderr = ssh.exec_command("df -Th")
print(stdout.read().decode('utf-8')) # 以utf-8编码对结果进行解码
ssh.close()
结果如下:
/Library/Frameworks/Python.framework/Versions/3.6/bin/python3 /Users/fanhaitao/PycharmProjects/untitled/paramiko模块学习.py
文件系统 类型 容量 已用 可用 已用% 挂载点
/dev/mapper/cl-root xfs 184G 1.7G 182G 1% /
devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev
tmpfs tmpfs 3.9G 0 3.9G 0% /dev/shm
tmpfs tmpfs 3.9G 8.5M 3.9G 1% /run
tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup
/dev/sda1 xfs 1014M 139M 876M 14% /boot
tmpfs tmpfs 783M 0 783M 0% /run/user/0
Process finished with exit code 0
2、上传或下载文件 - 用户名+密码
2.1 上传文件
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import paramiko
import os
import sys
t = paramiko.Transport(('10.255.1.42',22))
t.connect(username='root',password='123456')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('test.py','/root/test.py')
t.close()
结果:
[root@Openshift41 ~]# ll
总用量 20
-rw-------. 1 root root 1591 2月 26 16:21 anaconda-ks.cfg
-rw-r--r-- 1 root root 15080 10月 3 2017 epel-release-latest-7.noarch.rpm
[root@Openshift41 ~]# ll
总用量 24
-rw-------. 1 root root 1591 2月 26 16:21 anaconda-ks.cfg
-rw-r--r-- 1 root root 15080 10月 3 2017 epel-release-latest-7.noarch.rpm
-rw-r--r-- 1 root root 836 4月 28 11:43 test.py
2.2 下载文件
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import paramiko
import os
import sys
t = paramiko.Transport(('10.255.1.42',22))
t.connect(username='root',password='123456')
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/root/test.py','ceshi.py')
t.close()
结果:
3、执行命令 - 密匙
此处的脚本是在Linux机器上运行的
#!/usr/bin/python3
#-*- coding: utf-8 -*-
import paramiko
private_key_path = '/root/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(private_key_path)
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('10.255.1.42',22,'root',key)
stdin,stdout,stderr = ssh.exec_command('df -Th')
print(stdout.read().decode('utf-8'))
ssh.close()
4、上传或下载文件 - 密匙
# 上传文件
import paramiko
pravie_key_path = '/root/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(('10.255.1.42', 22))
t.connect(username='root', pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.put('log.log','/tmp/log.log')
t.close()
# 下载文件
import paramiko
pravie_key_path = '/root/.ssh/id_rsa'
key = paramiko.RSAKey.from_private_key_file(pravie_key_path)
t = paramiko.Transport(('10.255.1.42', 22))
t.connect(username='root', pkey=key)
sftp = paramiko.SFTPClient.from_transport(t)
sftp.get('/tmp/log.log', 'log3.log')
t.close()