1.什么是paramiko?
paramiko模块提供了基于ssh连接,进行远程登录服务器执行命令和上传下载文件的功能。这是一个第三方的软件包,使用之前需要安装。
pip homepage: http://www.paramiko.org/
pip github addr: https://github.com/paramiko
官方推荐安装方法:
pip install paramiko
示例代码:
1.简易ssh功能
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # author heaven import paramiko #创建ssh对象 ssh = paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #链接服务器 ssh.connect(hostname='10.11.1.1',port=2704,username='python',password='123456') #定义标准输入,标准输出,错误输出,执行命令 stdin,stdout,stderr = ssh.exec_command('ls') #获取命令执行结果 result = stdout.read().decode() #打印命令执行结果 print(result) #关闭链接 ssh.close()
2.简易ftp功能
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # author heaven import paramiko #创建transport对象 transport = paramiko.Transport(('localhost',2704)) #连接服务器 transport.connect(username='python',password='123456') #创建ftp对象 sftp = paramiko.SFTPClient.from_transport(transport) #put 将本地的a.txt文件上传到对方服务器指定目录(上传) sftp.put('/home/python/a.txt','/home/python/heaven/test.txt') #get 下载 #sftp.get('remote_path','local_path') transport.close
ssh升级版本:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # author heaven import paramiko #创建ssh对象 ssh = paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #链接服务器 ssh.connect(hostname='172.16.25.25',port=2704,username='python',password='123456') while True: try: yourinput = input("请输入你要执行的命令: ").strip(); stdin,stdout,stderr = ssh.exec_command(yourinput); if len(yourinput) == 0: continue; result = stdout.read().decode(); print(result); except KeyboardInterrupt as e: #注意此处异常的写法,python2与python3中不一样,python3中必须用as print('你已经退出登录! {}'.format(e)); break #关闭链接 ssh.close()
sftp升级版本:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # author heaven import paramiko class Ftp(object): def __init__(self): self.transport = paramiko.Transport(('localhost',2704)) self.transport.connect(username='python',password='123456') def put(self): #上传 local_path = input("请输入本地要上传的文件的绝对路径: ").strip() remote_path = input("请输入远端服务器文件的绝对路径: ").strip() sftp = paramiko.SFTPClient.from_transport(self.transport) sftp.put(local_path,remote_path) self.transport.close newftp = Ftp() newftp.put()
使用ssh秘钥免密方式登录
#!/usr/bin/env python3 # -*- coding: utf-8 -*- # author heaven #在使用此方法登录之前必须要保证两台通信的主机已经完成了秘钥交互,能够远程免密登录 import paramiko #创建链接key对象,指定本地的RSA私钥文件,如果建立秘钥对时候有设置有密码,password为设定的密码,如无则不用指定password参数 pkey = paramiko.RSAKey.from_private_key_file('/home/python/.ssh/id_rsa') #创建链接对象 ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #使用秘钥链接 ssh.connect(hostname='11.20.11.11',port=2704,username='python',pkey=pkey) stdin,stdout,stderr=ssh.exec_command('ls') print(stdout.read().decode()) ssh.close()
ftp使用key链接
#!/usr/bin/env python #coding:utf8 #必须先将公钥文件传输到服务器的~/.ssh/authorized_keys中 import paramiko # 指定本地的RSA私钥文件,如果建立密钥对时设置的有密码,password为设定的密码,如无不用指定password参数 pkey = paramiko.RSAKey.from_private_key_file('id_rsa_1024') #创建transport对象绑定主机和端口,指定用户和密钥连接 transport = paramiko.Transport(('172.16.32.129',2323)) transport.connect(username='root',pkey=pkey) ssh = paramiko.SSHClient() ssh._transport = transport #类属性赋值 #允许将信任的主机自动加入到known_hosts列表 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #执行命令 stdin,stdout,stderr=ssh.exec_command('free -m') print(stdout.read().decode()) ssh.close()