Python标准库系列之Paramiko模块

Paramiko是一个Python实施SSHv2的协议,提供客户端和服务器的功能。虽然它利用一个Python C扩展低级别加密的paramiko本身就是围绕SSH联网概念的纯Python接口。

Paramiko官网:http://www.paramiko.org/

安装:

pip install paramiko

安装之后进入python解释器导入模块,如果导入成功则安装成功,否则安装失败

使用用户名和密码连接:

import paramiko

ssh = paramiko.SSHClient()
# 如果是一个新主机连接,会出现yes/no,AutoAddPolicy自动填写yes的
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect(hostname='192.168.20.161', port=22, username='root', password='123456')
# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -h')
"""
stdin:标准输入
stdout:标准输出
stderr:错误输出
"""
# 获取正确的输出
result = stdout.read()

ssh.close()

print(result.decode("utf-8"))

执行结果为:

C:\Users\zxb\venv\测试\Scripts\python.exe D:/pythonfile/测试/三方库/测试.py
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   38G   28G   11G   73% /
devtmpfs                 479M     0  479M    0% /dev
tmpfs                    489M     0  489M    0% /dev/shm
tmpfs                    489M   13M  476M    3% /run
tmpfs                    489M     0  489M    0% /sys/fs/cgroup
/dev/mapper/centos-home   10G  8.6G  1.5G   86% /home
/dev/sda1                197M  109M   88M   56% /boot
/dev/sr0                 4.1G  4.1G     0  100% /mnt/cdroom
tmpfs                     98M     0   98M    0% /run/user/0

使用公私钥连接:

import paramiko

# 指定私钥位置
private_key = paramiko.RSAKey.from_private_key_file('D:\pythonfile\id_rsa')

# 创建ssh对象
ssh = paramiko.SSHClient()

# 允许连接不在konow_hosts主机中的主机,跳过输入yes/no

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

# 连接
ssh.connect(hostname='192.168.20.161', port=22,username='root', pkey=private_key)

# 执行命令
stdin, stdout, stderr = ssh.exec_command('df -h')

result = stdout.read()

ssh.close()

print(result.decode("utf-8"))

上传与下载文件

import paramiko

t = paramiko.Transport(('192.168.20.161', 22))

t.connect(username='root', password='123456')

sftp = paramiko.SFTPClient.from_transport(t)

# 远程目录 需要与上传的文件名字一样,否则报错

remotepath = '/home/test/id_rsa'

# 本地文件
localpath = 'D:\pythonfile\id_rsa'

# 上传文件
sftp.put(localpath, remotepath)

# 下载文件
# sftp.get(remotepath, localpath)

t.close()

猜你喜欢

转载自blog.csdn.net/zxb_830/article/details/85625106