一、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:
pytest——test case之间参数传递
猴赛雷艾米君:
python——paramiko详解
John Zhuang:
python——paramiko详解
大家一起学编程(python):