[paramiko] SSH连接服务器

背景知识

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输

SSHClient类

SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPClient建立的方法(open_sftp),通常用于执行远程命令。

Paramiko中的几个基础名词:

1、Channel:是一种类Socket,一种安全的SSH传输通道;
2、Transport:是一种加密的会话,使用时会同步创建了一个加密的Tunnels(通道),这个Tunnels叫做Channel;
3、Session:是client与Server保持连接的对象,用connect()/start_client()/start_server()开始会话。

与 SSH 服务器的会话的高级表示。此类包装Transport、Channel和SFTPClient以处理身份验证和打开通道的大多数方面。一个典型的用例是:

import paramiko

def ssh_client():
    #私钥的绝对路径
    pkey_path = paramiko.RSAKey.from_private_key_file(r'/Users/.ssh/id_rsa')

    # 创建一个实例化
    ssh = paramiko.SSHClient()
    # 加载系统HostKeys密钥
    ssh.load_system_host_keys()
    # 自动添加策略,保存远端主机的主机名和密钥信息,如果不添加,那么不在本地knows_hosts文件中记录的主机将无法连接,默认拒接
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    #连接远端主机,此处不需要密码,为私钥文件
    ssh.connect('103.115.**.**',port=22, username='username', pkey=pkey_path)
    #执行命令
    stdin, stdout,stderr = ssh.exec_command('show ip int br')
    print(stdout.read().decode('utf-8'))
    ssh.close()

if __name__ == '__main__':
    ssh_client()

ssh.connect() 参数解释:

常用参数
hostname    //远端主机,填写IP和域名都可以, 必填项
port=SSH_PORT    //缺省为22端口
username=None    //用于登陆远端主机使用的用户名
password=None    //用于登陆远端主机使用的密码
pkey=None    //使用私钥用于身份认证,也叫'免密'登陆
key_filename=None    //使用私钥文件名
timeout=None    //tcp连接超时时间
allow_agent=True    //缺省允许连接到ssh代理
look_for_keys=True    //缺省在~/.ssh中搜索私钥文件,默认为True 允许
compress=False    //缺省没有开启压缩

SFTPClient类

SFTPCLient作为一个sftp的客户端对象,根据ssh传输协议的sftp会话,实现远程文件操作,如上传、下载、权限、状态。

from_transport(cls,t)    //创建一个已连通的SFTP客户端通道
put(localpath, remotepath, callback=None, confirm=True)    //将本地文件上传到远端主机
get(remotepath, localpath, callback=None)    //从远端主机下载文件到本地
mkdir()        //创建目录
remove()    //删除目录
rename()    //重命名目录
stat()        //查看文件状态
listdir()    //列出目录下的文件

连接实例,本地/服务器上传、下载文件

import os
import paramiko


class connect_ssh:
    def connect(self, local_path, remote_path):
        jumpbox_host_ip = "103.115.**.**"  
        ssh_user = "tina.huanght"
        ssh_key_filename = os.getenv('HOME') + '/.ssh/id_rsa'

        t = paramiko.Transport(jumpbox_host_ip, 22)
        t.connect(username=ssh_user, pkey=ssh_key_filename)
        sftp = paramiko.SFTPClient.from_transport(t)

        sftp.put(localpath=local_path, remotepath=remote_path)
        print("** Upload file successfully! **")

        sftp.get(remotepath=remote_path, localpath=local_path)
        print("** download file successfully! **")

        t.close()
        sftp.close()
        print("Closed!")


if __name__ == '__main__':
    remote_path = '/ldap_home/user/test_data/test_simple_data.csv'
    local_path = '/Users/user/Downloads/testfolder/test_simple_data.csv'
    server = connect_ssh(local_path, remote_path)


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值