使用开源的Paramiko,我们就可以用Python代码中通过SSH协议对远程服务器执行操作,不需要手敲SSH命令,从而实现自动化运维。
ssh是一个协议,OpenSSH是其中一个开源实现,paramiko库,实现了SSHv2协议(底层使用加密)。
项目文档:点我跳转
扩展:ssh协议,OpenSSH
1,安装
pip安装paramiko >之前2,导入模块
进口paramiko >之前3,使用
def initSshClinet (): “‘ 初始化,SSH连接账号密码登录服务器 返回:sshClinet “‘ ip=" " #服务器ip地址 sshClinet=paramiko.SSHClient () sshClinet.set_missing_host_key_policy (paramiko.AutoAddPolicy ()) sshClinet。22岁的连接(ip用户名、pw超时=360) 返回sshClinet >之前def exeCommond(指令): “‘ 执行shell命令 “‘ stdin、stdout stderr=sshClient.exec_command(命令) outStr=stdout.readlines () print (" \ n " . join (outStr)) >之前def sftpUploadFile (localPath remotePath): #获取SFTP实例 sftp=sshClinet.open_sftp () #执行上传动作 sftp。put (localPath remotePath) >之前def sftpDownloadFile (localPath remotePath): #获取SFTP实例 sftp=sshClinet.open_sftp () #执行下载动作 sftp。get (localPath remotePath) >之前末尾记得要关闭连接
sshClient.close () >之前也可以使用私钥登录:
#配置私人密钥文件位置 私人=paramiko.RSAKey.from_private_key_file('/用户/ch/. ssh/id_rsa) #实例化SSHClient 客户=paramiko.SSHClient () #自动添加策略,保存服务器的主机名和密钥信息,如果不添加,那么不再本地know_hosts文件中记录的主机将无法连接 client.set_missing_host_key_policy (paramiko.AutoAddPolicy ()) #连接SSH服务端,以用户名和密码进行认证 client.connect(主机名=10.0.0.1”表示,端口=22日用户名=?pkey=私人) >之前
paramiko包含两个核心组件:SSHClient和SFTPClient。
-
<李> SSHClient的作用类似于Linux的ssh命令,是对ssh会话的封装,该类封装了传输(运输),通道(频道)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。李>
<李> SFTPClient的作用类似与Linux的sftp命令,是对sftp客户端的封装,用以实现远程文件操作,如文件上,传下载,修改文件权限等操作。李>
名词 解释 通道 是一种套接字类,一种安全的SSH传输通道 运输 是一种加密的会话,使用时会同步创建了一个加密的隧道(通道),这叫个隧道做渠道 会话 是客户端与服务器保持连接的对象,用连接()/start_client ()/start_server()开始会话
<强> SSHClient常用的方法介绍强>
connect():实现远程服务器的连接与认证,对于该方法只有主机名是必传参数。
参数 说明 主机名 连接的目标主机 端口=SSH_PORT 指定端口 用户名=没有 验证的用户名 密码=没有 验证的用户密码 pkey=没有 私钥方式用于身份验证 key_filename=没有 一个文件名或文件列表,指定私钥文件 timeout=没有 可选的tcp连接超时时间 allow_agent=True 是否允许连接到ssh代理,默认为真正的允许 look_for_keys=True 是否在~/sh中搜索私钥文件,默认为真正的允许 压缩=False 是否打开压缩
set_missing_host_key_policy():设置远程服务器没有在know_hosts文件中记录时的应对策略。传入MissingHostKeyPolicy的子类,目前支持三种策略: