ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

paramiko模块

2022-08-01 18:31:27  阅读:149  来源: 互联网

标签:None 模块 self sftp ssh key paramiko


paramiko是什么

paramiko包含两个核心组件:SSHClient和SFTPClient。

  • SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。
  • SFTPClient的作用类似与Linux的sftp命令,是对SFTP客户端的封装,用以实现远程文件操作,如文件上传、下载、修改文件权限等操作。

paramiko的基本使用

1.SSHClient常用的方法介绍

import paramiko
ssh = paramiko.SSHClient()
# 第一次连接的时候一般都会提示yes/no,这是因为远程服务器没有在know_hosts文件中记录时的应对策略
# set_missing_host_key_policy()设置连接的远程主机没有本地主机密钥或HostKeys对象时的策略,目前支持三种:
# AutoAddPolicy 自动添加主机名及主机密钥到本地HostKeys对象,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认
# WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接
# RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项 
# 我一般使用第一种方式
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# connect():实现远程服务器的连接与认证,对于该方法只有hostname是必传参数
# 常用参数:
# hostname 连接的目标主机
# port=SSH_PORT 指定端口
# username=None 验证的用户名
# password=None 验证的用户密码
# pkey=None 私钥方式用于身份验证
# key_filename=None 一个文件名或文件列表,指定私钥文件
# timeout=None 可选的tcp连接超时时间
# allow_agent=True, 是否允许连接到ssh代理,默认为True 允许l
# ook_for_keys=True 是否在~/.ssh中搜索私钥文件,默认为True 允许
# compress=False, 是否打开压缩
ssh = connect(hostname='192.168.153.32' ,port='22', username='root', password='mypassword')

# exec_command():在远程服务器执行Linux命令的方法,他会返回一个元祖一共有三个值
# stdin
# stdout返回的是执行结果,如果执行失败stdout返回None
# stderr返回的是错误信息,如果命令执行成功stderr返回的是None
# stdout和stderr返回的都是字节,我们需要decode解码一下
stdin, stdout, stderr = ssh.exec_command('ls')
print(stdout.read().decode('utf-8'))

# open_sftp():在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。
# 利用SSHClient对象的open_sftp()方法,可以直接返回一个基于当前连接的sftp对象,可以进行文件的上传等操作.
sftp = client.open_sftp() 
sftp.put('test.txt','text.txt') 

由于工作需要自己封装了一个工具类,提供远程操作服务器,与上传文件。

import paramiko

class Ssh(object):
    def __init__(self, ip, username="root", password=None, private_key_path=None, port=22):
        # key = paramiko.RSAKey.from_private_key_file(private_key_path)
        self.ssh = paramiko.SSHClient()
        self.ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        self.ssh.connect(hostname=ip, port=port, username=username, password=password,key_filename=private_key_path)
        # self.t = paramiko.Transport((ip,port))
        # self.t.connect(username='root',pkey=key)
        # self.sftp = paramiko.SFTPClient.from_transport(self.t)
    
    def cmd(self,cmd):
        _,stdout,stderr = self.ssh.exec_command(cmd)
        msg = stdout.read().decode()
        err = stderr.read().decode()
        data = {
            "code": 0,
            "msg": ""
        }
        if len(err) != 0:
            data['code'] = 1
            data['msg'] = err
        else:
            data['code'] = 0
            data['msg'] = msg
        return data
    
    def put(self, src, desc):
        try:
            sftp = self.ssh.open_sftp()
            sftp.put(src,desc)
        except Exception as e:
            return e

ssh = Ssh(ip="192.168.153.32", private_key_path="C:\\Users\\Administrator\\.testssh\\linux_fyh_rsa", port=22)
# print(ssh.put("C:\\Users\\Administrator\\Desktop\\sh_auto\\test\\ssh_linux.py",'/root/ssh_linux.py'))
print(ssh.cmd('ls'))

标签:None,模块,self,sftp,ssh,key,paramiko
来源: https://www.cnblogs.com/bkhb/p/16541401.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有