相关文章推荐
豁达的帽子  ·  解决:pandas.errors.Empty ...·  1 月前    · 
含蓄的汉堡包  ·  Invoke-Command ...·  5 月前    · 
自信的小狗  ·  RStudio 改名 ...·  1 年前    · 

一、SSHClient类

ssh远程连接服务器 connet()

远程主机没有本地主机密钥或HostKeys对象时的连接方法,需要配置set_missing_host_key_policy(policy)

远程执行命令

在远程服务器上生成新的交互式shell

关闭ssh连接

open_sftp()

load_system_host_keys方法

SFTPClient类

SFTPClient类常用方法

from_transport方法

get方法

paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, 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 以处理身份验证和打开通道的大多数方面。一个典型的用例是:

client = paramiko.SSHClient()
client.load_system_host_keys()
client.connect('ssh.example.com')
stdin, stdout, stderr = client.exec_command('ls -l')

ssh远程连接服务器 connet()

connect(hostname, port=22, username=None, password=None, pkey=None, key_filename=None, timeout=None, allow_agent=True, look_for_keys=True, compress=False, sock=None, gss_auth=False, gss_kex=False, gss_deleg_creds=True, gss_host=None, banner_timeout=None, auth_timeout=None, gss_trust_dns=True, passphrase=None)

参数说明:

hostname(str类型),连接的目标主机地址;
port(int类型),连接目标主机的端口,默认为22;
username(str类型),校验的用户名(默认为当前的本地用户名);
password(str类型),密码用于身份校验或解锁私钥;
pkey(Pkey类型),私钥方式用于身份验证;
key_filename(str or list(str)类型),一个文件名或文件名列表,用于私钥的身份验证;
timeout(float类型),一个可选的超时时间(以秒为单位)的TCP连接;
allow_agent(bool类型),设置为False时用于禁用连接到SSH代理;
look_for_keys(bool类型),设置为False时用于来禁用在~/.ssh中搜索私钥文件;
compress(bool类型),设置为True时打开压缩。

import paramiko
ssh = paramiko.SSHClient()
ssh.connect(ip,22,username,passwd,timeout=5)

此处ip、username、passwd都作为变量;

远程主机没有本地主机密钥或HostKeys对象时的连接方法,需要配置set_missing_host_key_policy(policy)

参数常见取值有3种,分别如下:

AutoAddPolicy: 自动添加主机名及主机密钥到本地的known_hosts,不依赖load_system_host_key的配置。即新建立ssh连接时不需要再输入yes或no进行确认。最为常用。
WarningPolicy 用于记录一个未知的主机密钥的python警告。并接受,功能上和AutoAddPolicy类似,但是会提示是新连接。
RejectPolicy 自动拒绝未知的主机名和密钥,依赖load_system_host_key的配置。此为默认选项

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

远程执行命令

该命令的输入与输出流为标准输入(stdin)、输出(stdout)、错误(stderr)的Python文件对像

命令执行完毕后,通道将关闭,不能再使用。如果您想执行另一个命令,您必须打开一个新频道。

exec_command(command, bufsize=-1, timeout=None, get_pty=False, environment=None)

参数说明:

  • command(str类型),执行的命令串;
  • bufsize(int类型),文件缓冲区大小,默认为-1(不限制)

get_pty ( term='vt100' , width=80 , height=24 , width_pixels=0 , height_pixels=0 )

在远程服务器上生成新的交互式shell

invoke_shell(term='vt100', width=80, height=24, width_pixels=0, height_pixels=0, environment=None)

在此频道上请求交互式 shell 会话。如果服务器允许,则通道将直接连接到 shell 的 stdin、stdout 和 stderr。

通常您会在此之前调用get_pyt ,在这种情况下,shell 将通过 pty 进行操作,并且通道将连接到 pty 的 stdin 和 stdout。

当shell退出时,通道将被关闭并且不能被重用。如果您想打开另一个 shell,您必须打开一个新频道。

在SSH server端创建一个交互式的shell,且可以按自己的需求配置伪终端,可以在invoke_shell()函数中添加参数配置

chan = ssh.invoke_shell()

chan.send(cmd) #利用send函数发送cmd到SSH server,添加做回车来执行shell命令(cmd中需要有\n命令才能执行)。注意不同的情况,如果执行完telnet命令后,telnet的换行符是\r\n

通过recv函数获取回显 chan.recv(bufsize)

一般回显数据较多,需要通过while循环读取回显数据

关闭ssh连接

ssh.close()

open_sftp()

在当前ssh会话的基础上创建一个sftp会话。该方法会返回一个SFTPClient对象。

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

load_system_host_keys方法

加载本地公钥校验文件,默认为~/.ssh/known_host,非默认路径需要手工指定。(~/.ssh/known_hosts的作用:当ssh会把你每个你访问过计算机的公钥(public key)都记录在~/.ssh/known_hosts。当下次访问相同计算机时,OpenSSH会核对公钥。如果公钥不同,OpenSSH会发出警告)

load_system_host_keys(self,filename=None)

filename(str类型),指定远程主机公钥记录文件。

SFTPClient类

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

SFTPClient类常用方法

from_transport方法

创建一个已连通的SFTP客户端通道。
方法定义:
from_transport(cls,t)
参数说明:
t(transport),一个已通过验证的传输对象。
import paramiko
t = paramiko.Transport(('192.168.56.132',22))
t.connect(username='root',password='1234567')
sftp = paramiko.SFTPClient.from_transport(t)
这里from_transport()的入参还有其它方法获得
sshClient = paramiko.SSHClient()
sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
sshClient.connect(ip, port, user, pwd)
sftp = paramiko.SFTPClient.from_transport(sshClient.get_transport())

get方法

从远程SFTP服务端下载文件到本地。
方法定义:
        get(remotepath, localpath, callback=None)
参数说明:
        remotepath(str类型),需要下载的远程文件(源);
        callback(funcation(int,int)),获取已接收的字节数及总和传输字节数,以便回调函数调用,默认为None.

示例说明:

remotepath = '/data/logs/access.log'
localpath = '/home/access.log'
sftp.get(remotepath,localpath)

SFTPClient类其它常用方法说明:

  • mkdir ,在SFTP服务端创建目录,如sftp.mkdir("/home/userdir",mode=0777),默认模式是0777(八进制),在某些系统上,mode被忽略。在使用它的地方,当前的umask值首先被屏蔽掉。
  • remove ,删除SFTP服务端指定目录,如sftp.remove("/home/userdir")。
  • rename ,重命名SFTP服务端文件或目录,如sftp.rename("/home/test.sh","/home/testfile.sh")
  • stat ,获取远程SFTP服务端指定文件信息,如sftp.stat("/home/testfile.sh")。
  • listdir ,获取远程SFTP服务端指定目录列表,以Python的列表(List)形式返回,如sftp.listdir("/home")。
class Connection:
    def connect(self, ip, port, user, pwd):
        self.ip = ip
        self.port = port
        self.user = user
        self.pwd = pwd
        self.sshClient = paramiko.SSHClient()
        self.sshClient.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        if pwd != '':
            self.sshClient.connect(ip, port, user, pwd)
        else:
                self.sshClient.connect(ip, port, user,pwd,look_for_keys=False,timeout=5.0)
            except paramiko.ssh_exception.AuthenticationException:
                self.sshClient.get_transport().auth_none(user)
        self.sftp = paramiko.SFTPClient.from_transport(self.sshClient.get_transport())
    def push(self, local_file, remote_file):
        self.sftp.put(local_file, remote_file)
    def pull(self, remote_file, local_file):
        self.sftp.get(remote_file, local_file)
    def exe(self, cmd):
            a = self.sshClient.exec_command(cmd, timeout=60000)
            f_in, f_out, f_err = a
            return f_out.read()
        except Exception as e:
            log(e)
            return 'Exception no return'
    def exe_invoke(self,cmd,end_str=None):
        交互式执行命令,和exe实现功能相同。执行出错的时候可以尝试
        :param cmd:
        :param end_str: 通过该字段判断命令是否结束
        :param delaytime:
        :return:
            ssh = self.sshClient.get_transport().open_session()
            ssh.get_pty()
            ssh.invoke_shell()
            ssh.send(cmd + '\n')
            ret = ""
            while True:
                out = ssh.recv(1024)
                # print(out.decode('utf-8'))
                ret = ret + out.decode('utf-8').replace('\r','')
                if end_str in out.decode('utf-8'):
                    break
            return ret
        except Exception as e:
            log(e)
            return 'Exception no return'
    def exists(self, path):
        path_d = '/'.join(path.split('/')[:-1])
        path_b = path.split('/')[-1]
        print('---------')
        print(path_d)
        print(path_b)
        ls = self.exe('ls %s' % path_d).decode().split('\n')
        print(ls)
        if path_b in ls:
            return True
        else:
            return False
    def reconect(self):
        print('reconneting')
            self.close()
        except:
        finally:
            self.connect(self.ip, self.port, self.user, self.pwd)
    def close(self):
        self.sshClient.close()
        self.sftp.close()
paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接。paramiko支持Linux, Solaris, BSD, MacOS X, Windows等平台通过SSH从一个平台连接到另外一个平台。利用该模块,可以方便的进行ssh连接和sftp协议进行sftp文件传输。一、SSHClient类SSHClient的作用类似于Linux的ssh命令,是对SSH会话的封装,该类封装了传输(Transport),通道(Channel)及SFTPCl
go-elasticsearch Elasticsearch的官方Go客户。 兼容性客户端主要版本与兼容的Elasticsearch主要版本相对应:要连接到Elasticsearch 7.x,请使用7.x版本go-elasticsearch Elasticsearch的官方Go客户端。 兼容性客户端主要版本与兼容的Elasticsearch主要版本相对应:要连接到Elasticsearch 7.x,请使用客户端的7.x版本,要连接到Elasticsearch 6.x,请使用客户端的6.x版本。 使用Go模块时,请在导入路径中包含版本,并指定显式版本或分支:require github.com/elastic/go-elasticsearch/v7 7.x需要github.com/elastic/go-elas paramiko 模块是基于 Python 实现的 SSH 远程安全连接,可以提供在远程服务器上执行命令、上传文件到服务器或者从指定服务器下载文件的功能。 paramiko 模块安装方法 paramiko 模块不是 python 自带的标准库,需要自行下载安装,建议使用pip自动安装。方法如下: (1)配置pip命令和镜像源路径。如果已配置,跳过。 (2)执行pip install paramiko 进行安装。出现successful字样表示安装完成。 paramiko 常用函数介绍 SSH client类 (1) ssh 远程连接服务器,格式为:connect(hostname, port=22, usern
文章目录运维自动化 Python 一、模块介绍二、模块应用1.使用 paramiko 模块,通过 ssh 协议连接服务器2.解决首次连接known_hosts问题3、执行命令exec_command方法扩展:使用try异常捕获4、多台服务器执行命令5、从服务器上传下载文件--SFTPClient方法6、多台服务器上传下载文件扩展-文件操作可扩展练习 运维自动化 Python paramiko 模块 一、模块介绍 模块: paramiko 模块作用: 1、通过 ssh 协议远程执行命令 2、文件上传下载 安装模块: pip i
Paramiko 是一个 Python 库,用于实现 SSH 协议。它提供了客户端和服务器端的功能,可以用于连接 SSH 服务器、传输文件、执行命令等。以下是 Paramiko 的一些 详解 Paramiko 支持 SSH 2协议,包括密钥交换、加密、认证等功能。 安装 Paramiko 很简单,只需使用pip install paramiko 即可。 Paramiko 的主要类包括 SSH Client、SFTPClient、T...
1. paramiko 概述 ssh 是一个协议,Open SSH 是其中一个开源实现, paramiko Python 的一个库,实现了 SSH v2协议(底层使用cryptography)。 有了 Paramiko 以后,我们就可以在 Python 代码中直接使用 SSH 协议对远程服务器执行操作,而不是通过 ssh 命令对远程服务器进行操作。 由于 paramiko 属于第三方库,所以需要使用如下命令先行安装 2.安装 paramiko pip install paramiko 3.常用方法 connect():实现远程服务器的连接与认证,对于该方法只有hostname是必传参数。 hostname 连接的目标主机
# 密钥对象 private_key = paramiko .RSAKey.from_private_key_file(key_path, password=key_password) # 连接远程服务器 ssh .connect('hostname', port=22, username='username', pkey=private_key) # 执行命令 stdin, stdout, stderr = ssh .exec_command('ls') # 输出命令执行结果 print(stdout.read().decode()) # 关闭连接 ssh .close() - 自定义日志 ``` python import paramiko import logging # 创建 SSH 客户端 ssh = paramiko . SSH Client() # 自动添加主机密钥 ssh .set_missing_host_key_policy( paramiko .AutoAddPolicy()) # 创建日志记录器 logger = logging.getLogger(' paramiko ') logger.setLevel(logging.DEBUG) # 创建日志处理器 handler = logging.StreamHandler() handler.setLevel(logging.DEBUG) # 创建日志格式化器 formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) # 添加日志处理器 logger.addHandler(handler) # 连接远程服务器 ssh .connect('hostname', port=22, username='username', password='password') # 执行命令 stdin, stdout, stderr = ssh .exec_command('ls') # 输出命令执行结果 print(stdout.read().decode()) # 关闭连接 ssh .close() 总之, Paramiko 库是 Python 中一个非常强大的 SSH 协议库,其功能十分丰富,可以满足大部分远程操作的需求。 开元固本散: 话说回来,阿波罗定位就是可以单独卖的产品,训练平台、硬件调度、任务调度都是各种适配,主机厂,算法厂,硬件平台厂、软件平台厂来者不挑。八爪鱼一开始就是打算自用或者全套方案打包交给云服务卖,头孢就着昇腾这么用,现在昇腾自己用都不够用,另一方面又懒的适配别的平台,那肯定是没别人会用了。 当然,没别人用的原因中有上述原因也不代表只有上述原因,也不代表仿真器本身除了适配问题以外没有其他问题。在端到端可微管线流行之前,吃豆人/贪吃蛇那类仿真器和老头环那类仿真器本来也不是用来训练同一类模型的工具,不存在替代关系。即使这两年,自驾公司越来越需要端到端仿真器,在我看来只要一个大厂愿意投入,同时投入的不是一群水货,都能或多或少捯饬出来一个基于现实数据搭建虚拟场景的“老头环”,差异无非就是搭建/生成的灵活度。再新的方法领域迁移就费劲了,我不认为任何公司商用了那种东西。 python——socket编程 Ryan Zhao-SWU: Great! pytest——test case之间参数传递 猴赛雷艾米君: 我这边弄了总是提示说。Fixture "get_global_data" called directly. Fixtures are not meant to be called directly, but are created automatically when test functions request them as parameters. python——paramiko详解 John Zhuang: 写的不错,顶个贴,点个赞,嘿嘿! python——paramiko详解 大家一起学编程(python):