Python标准库系列之Paramiko模块
Paramiko
是一个Python实施SSHv2
的协议,提供客户端和服务器的功能。虽然它利用一个Python C扩展低级别加密的paramiko本身就是围绕SSH联网概念的纯Python接口。
Paramiko官网:http://www.paramiko.org/
安装Paramiko
1
|
pip3 install paramiko
|
安装之后进入python解释器导入模块,如果导入成功则安装成功,否则安装失败.
1
2
3
4
|
C:\Users\Administrator>python
Python
3.5
.
2
(v3.
5.2
:
4def2a2901a5
, Jun
25
2016
,
22
:
18
:
55
) [MSC v.
1900
64
bit (AMD64)] on win32
Type
"help"
,
"copyright"
,
"credits"
or
"license"
for
more information.
>>>
import
paramiko
|
使用用户名与密码的方式连接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# 导入paramiko模块
>>>
import
paramiko
# 创建SSHClient对象
>>> ssh
=
paramiko.SSHClient()
# 如果是一个新主机连接,会出现yes/no,AutoAddPolicy自动填写yes的
>>> ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
>>> ssh.connect(hostname
=
'192.168.56.100'
, port
=
22
, username
=
'root'
, password
=
'123456'
)
# 执行命令
>>> stdin, stdout, stderr
=
ssh.exec_command(
'df -h'
)
# 获取正确的输出
>>> result
=
stdout.read()
# 关闭连接
>>> ssh.close()
# 获取到的值
>>> result
b
'Filesystem Size Used Avail Use% Mounted on\n/dev/sda3 48G 3.3G 45G 7% /\ndevtmpfs 984M 0 984M 0% /dev\ntmpfs 993M 0 993M 0% /dev/shm\ntmpfs 993M 8.9M 984M 1% /run\ntmpfs 993M 0 993M 0% /sys/fs/cgroup\n/dev/sda1 197M 137M 60M 70% /boot\ntmpfs 199M 0 199M 0% /run/user/0\n'
|
使用密钥的方式连接
在使用密钥的方面连接之前我们需要先做ssh-key
认证,步骤如下:
1
|
[root@linux
-
node1 ~]
# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''
|
然后下载/root/.ssh/id_rsa
下载下来,复制到E:\python-intensive-training\
目录系,下面是在windows
下使用paramiko
连接脚本如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#!/use/bin/env python
# _*_ coding: utf-8 _*_
import
paramiko
# 指定密钥的文件
private_key
=
paramiko.RSAKey.from_private_key_file(
'E:\python-intensive-training\id_rsa'
)
# 创建SSH对象
ssh
=
paramiko.SSHClient()
# 允许连接不在know_hosts文件中的主机,要不然一台新机器去连接它的时候会让你输入yes/no
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
# 连接服务器
ssh.connect(hostname
=
'192.168.56.100'
, port
=
22
, username
=
'root'
, pkey
=
private_key)
# 执行命令
stdin, stdout, stderr
=
ssh.exec_command(
'df -h'
)
"""
stdin:标准输入
stdout:标准输出
stderr:错误输出
"""
# 获取命令执行的正确结果
result
=
stdout.read()
# 关闭连接
ssh.close()
# 输出执行结果
print
(
str
(result, encoding
=
'utf-8'
))
|
文件上传与下载
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/usr/bin/python
import
paramiko
t
=
paramiko.Transport((
'192.168.56.100'
,
22
))
t.connect(username
=
"root"
, password
=
"123456"
)
sftp
=
paramiko.SFTPClient.from_transport(t)
# 远程目录
remotepath
=
'/tmp/id_rsa'
# 本地文件
localpath
=
'id_rsa'
# 上传文件
sftp.put(localpath, remotepath)
# 下载文件
# sftp.get(remotepath, localpath)
# 关闭连接
t.close()
|
本文转自 Edenwy 51CTO博客,原文链接:http://blog.51cto.com/edeny/1925811,如需转载请自行联系原作者