一、Paramiko模块
paramiko是一个自由和开放源码模块使用,实现SSH2协议安全(认证和加密)连接到远程计算机.
二、windwos下安装paramiko模块
#在DOS命令行执行如下命令 pip3 install paramiko
三、在centos下安装paramiko模块
1)下载paramiko安装包:
https://pypi.python.org/packages/source/p/paramiko/paramiko-1.14.0.tar.gz
2)解压缩文件
tar -xzf paramiko-1.14.0.tar.gz cd paramiko-1.14.0 执行命令: python setup.py install 安装完成后进入到demos目录中运行如下命令检测安装结果: python demo.py localhost
可能出现问题: http://www.cnblogs.com/hyli/p/3910585.html
3、可能出现的问题 a.ImportError: No module named ecdsa 解决办法: 下载安装包:https://pypi.python.org/packages/source/e/ecdsa/ecdsa-0.11.tar.gz#md5=8ef586fe4dbb156697d756900cb41d7c cd ecdsa-0.11 解压缩: tar -xzf ecdsa-0.11.tar.gz python setup.py install b.ImportError: No module named Crypto.PublicKey 解决办法: yum -y install pycrypto
四、paramiko简单使用
1)SSHClient:用于连接远程服务器并执行基本命令
基于用户名和密码进行连接
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:lcj import paramiko #创建SSH对象 ssh = paramiko.SSHClient() #允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #连接服务器 ssh.connect(hostname="192.168.1.104",port = 22,username=‘lcj‘,password=‘123123‘) #执行操作: stdin,stdout,stderr = ssh.exec_command(‘ls‘) #获取执行结果 result = stdout.read() print(result) #关闭连接 ssh.close()
2)分装用户和密码连接执行命令
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:lcj import paramiko #链接服务器 transport = paramiko.Transport((‘192.168.1.152‘,22)) transport.connect(username=‘xiaoluo‘,password=‘123456‘) #创建SSH对象 ssh = paramiko.SSHClient() ssh._transport = transport #将链接对象引用给ssh进行连接 #执行操作: stdin,stdout,stderr = ssh.exec_command(‘du‘) #获取执行结果 print(stdout.read()) #关闭连接 transport.close()
3)基于公钥秘钥连接
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:lcj import paramiko private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘)#私钥路径 # 创建SSH对象 ssh = paramiko.SSHClient() # 允许连接不在know_hosts文件中的主机 ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 连接服务器 ssh.connect(hostname=‘192.168.1.152‘, port=22, username=‘xiaoluo‘, key=private_key) # 执行命令 stdin, stdout, stderr = ssh.exec_command(‘df‘) # 获取命令结果 result = stdout.read() print(result) # 关闭连接 ssh.close()
SSHClient封装Transport
SFTPClient
用于连接远程服务器并执行上传下载
1)基于用户名和密码上传下载
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:lcj import paramiko #创建paramiko与服务器之间链接 transport = paramiko.Transport((‘192.168.1.152‘,22)) transport.connect(username=‘root‘,password=‘123456‘) #创建传输通道 sftp = paramiko.SFTPClient.from_transport(transport) # paramiko001.py 上传至服务器 /home/ww.py 修改文件名为:ww.py # sftp.put(‘paramiko001.py‘, ‘/home/ww.py‘) # 将remove_path 下载到本地 local_path sftp.get(‘/home/ww.py‘, ‘local_path‘) #关闭连接 transport.close()
2)基于公钥密码上传下载:
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:lcj import paramiko #创建公钥:/home/auto/.ssh/id_rsa公钥路径 private_key = paramiko.RSAKey.from_private_key_file(‘/home/auto/.ssh/id_rsa‘) #建立与服务器链接 transport = paramiko.Transport((‘192.168.1.152‘,22)) transport.connect(username=‘root‘,pkey=private_key) #建立文件传输管道 sftp = paramiko.SSHClient.from_transport(transport) # 将location.py 上传至服务器 /tmp/test.py sftp.put(‘paramiko001.py‘, ‘/tmp/test.py‘) # 将remove_path 下载到本地 local_path # sftp.get(‘remove_path‘, ‘local_path‘) #关闭连接 transport.close()
#!/usr/bin/env python # -*- coding:utf-8 -*- # Author:lcj import paramiko import uuid #创建SSH对象 class SSHConnection(object): #连接服务器,并将信息保存至内存中 def __init__(self, host=‘192.168.1.152‘, port=22, username=‘xiaoluo‘,pwd=‘123456‘): self.host = host self.port = port self.username = username self.pwd = pwd self.__k = None def run(self): self.connect() pass self.close() def connect(self): transport = paramiko.Transport((self.host,self.port)) transport.connect(username=self.username,password=self.pwd) self.__transport = transport def close(self): self.__transport.close() def cmd(self, command): ssh = paramiko.SSHClient() ssh._transport = self.__transport # 执行命令 stdin, stdout, stderr = ssh.exec_command(command) # 获取命令结果 result = stdout.read() return result #创建上传下载函数 def upload(self,local_path, target_path): # 连接,上传 sftp = paramiko.SFTPClient.from_transport(self.__transport) # 将location.py 上传至服务器 /tmp/test.py # sftp.put(‘fort-KEY.py‘, target_path) sftp.put(‘fort-KEY.py‘, ‘/home/xiaoluo/dd.py‘) # sftp.get(‘‘) ssh = SSHConnection() ssh.connect() r1 = ssh.cmd(‘df‘) print(r1) #将文件paramiko001.py上传至/home/xiaoluo/ff.py并修改文件为ff.py ssh.upload(‘paramiko001.py‘, "/home/xiaoluo/fc.py") #关闭连接 ssh.close()
demo
多线程执行批量主机执行命令(等待更新)
时间: 2024-12-21 22:45:28