当前位置: 首页 > 后端技术 > Python

Python的自动化运维(Paramiko)

时间:2023-03-25 21:33:15 Python

介绍使用开源的Paramiko,我们可以使用Python代码通过SSH协议对远程服务器进行操作,无需手动敲入ssh命令,从而实现自动化运维。ssh是一个协议,OpenSSH是开源实现之一,paramiko库,它实现了SSHv2协议(底层使用密码学)。项目文档:点我跳转到扩展:ssh协议,OpenSSH入门1、安装pipinstallparamiko2,导入模块importparamiko3,使用definitSshClinet():'''初始化,SSH连接账号密码登录服务器:return:sshClinet'''ip=""#serveripaddresssshClinet=paramiko.SSHClient()sshClinet.set_missing_host_key_policy(paramiko.AutoAddPolicy())sshClinet.connect(ip,22,userName,pw,timeout=360)returnsshClinetdefexeCommond(commond):'''执行shell命令'''stdin,stdout,stderr=sshClient.exec_command(command)outStr=stdout.readlines()print("\n".join(outStr))defsftpUploadFile(localPath,remotePath):#获取SFTP实例sftp=sshClinet.open_sftp()#执行上传操作sftp.put(localPath,remotePath)defsftpDownloadFile(localPath,remotePath):#获取SFTP实例sftp=sshClinet.open_sftp()#执行下载操作sftp.get(localPath,remotePath)记得在sshClient.close()结束时关闭连接你也可以我们e登录私钥:#配置私钥文件位置private=paramiko.RSAKey.from_private_key_file('/Users/ch/.ssh/id_rsa')#实例化SSHClientclient=paramiko.SSHClient()#自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么本地known_hosts文件中不再记录的主机将无法连接client.set_missing_host_key_policy(paramiko.AutoAddPolicy())#连接SSH服务器并使用用户名和密码进行身份验证client.connect(hostname='10.0.0.1',port=22,username='root',pkey=private)学习paramiko包含两个核心组件:SSHClient和SFTPClientSSHClient的功能是类似于Linux的ssh命令,是对SSH会话的封装,该类封装了SFTPClient建立的传输方式(Transport)、通道(Channel)和方法(open_sftp),通常用于执行远程命令。SFTPClient的功能类似于Linux的sftp命令。是对SFTP客户端的封装,实现远程文件操作,如文件上传、下载、文件权限修改等。名词解释Channel是Socket的一种,是一种安全的SSH传输通道。传输是加密会话。使用时,会同步创建一个加密的Tunnels(通道)。这个Tunnels叫做ChannelSession,是客户端和服务端保持连接的对象。使用connect()/start_client()/start_server()启动一个sessionSSHClient常用方法介绍connect():实现远程服务器的连接和认证。对于此方法,只有主机名是必需的参数。参数说明hostname目标主机port=SSH_PORT指定端口username=None认证用户名password=None认证用户密码pkey=None认证使用的私钥方式key_filename=None文件名或文件列表,指定私钥文件timeout=None可选tcp连接超时allow_agent=True是否允许连接ssh代理,默认为Trueallowlook_for_keys=True是否在~/.ssh中搜索私钥文件,默认为Trueallowcompress=False是否启用压缩set_missing_host_key_policy():Setknown_hosts文件中没有记录远程服务器时的响应策略。传入MissingHostKeyPolicy的子类,目前支持三种策略:当连接的远程主机没有本地主机密钥或HostKeys对象时设置策略,目前支持三种:MissingHostKeyPolicy子类说明AutoAddPolicy自动添加主机名和主机keyto本地HostKeys对象不依赖于load_system_host_key的配置。即当建立新的ssh连接时,不需要输入yes或no进行确认。WarningPolicy用于记录未知主机密钥的python警告。而accept,功能类似AutoAddPolicy,但是会提示新连接RejectPolicy自动拒绝未知主机名和密钥,具体取决于load_system_host_key的配置。这是默认选项exec_command():在远程服务器上执行Linux命令的方法。open_sftp():基于当前的ssh会话创建一个sftp会话。此方法将返回一个SFTPClient对象。SFTPClient常用方法介绍from_transport(cls,t):创建连接的SFTP客户端通道put(localpath,remotepath,callback=None,confirm=True):上传本地文件到服务器参数confirm:是否调用stat()method检查文件状态,返回结果ls-lget(remotepath,localpath,callback=None):从服务器下载文件到本地mkdir():在服务器上创建目录remove():在服务器上删除目录rename():onRename服务器上的目录stat():查看服务器文件状态listdir():列出服务器目录下的文件