第十六章 paramiko 模块执行远程主机的命令

2019-01-03  本文已影响127人  运维开发_西瓜甜

Paramiko 是用于实现执行远程命令和远程传输文件

安装

shell> pip3 install paramiko

执行命令

  1. 基于用户名和密码的连接
image.png

封装 Transport

import paramiko

transport = paramiko.Transport(('172.16.153.134', 22))
transport.connect(username='root', password='upsa')

ssh = paramiko.SSHClient()
ssh._transport = transport

stdin, stdout, stderr = ssh.exec_command('df -P')
print(stdout.read().decode())

transport.close()

2. 基于公钥秘钥连接

一定要先建立公钥信任

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

# 信任对方的公钥
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())


# 创建一个自己当前用户的私钥对象

private_key = paramiko.RSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_rsa')



# 连接服务器
ssh.connect(hostname='10.18.46.104', port=22,
            username='root',  # 服务器端的用户
            pkey=private_key  # 本地用户的私钥对象
            )

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

# 获取命令结果
result = str(stdout.read(), encoding='utf-8')

# 关闭连接
ssh.close()

二 文件上传下载

SFTPClient:

用于连接远程服务器并进行上传下载功能。

1. 基于用户名密码上传下载

import paramiko
​
transport = paramiko.Transport(('10.18.46.104',22))
transport.connect(username='root',password='redhat')

sftp = paramiko.SFTPClient.from_transport(transport)

# 将location.py 上传至服务器 /tmp/test.py
sftp.put('回顾', '/tmp/回顾.txt')

# 将远程主机的文件 /tmp/test.py 下载到本地并命名为  some.py
sftp.get('/tmp/回顾.txt', 'some.txt')

transport.close()

2. 基于公钥秘钥上传下载

import paramiko

# 下面的命令可以快速创建密钥对,并用 -t 指定了算法类型为 ecdsa
## ssh-keygen -t ecdsa -N "" 

# 创建一个本地当前用户的私钥对象
private_key = paramiko.ECDSAKey.from_private_key_file('/Users/yanshunjun/.ssh/id_ecdsa')

# 创建一个传输对象
transport = paramiko.Transport(('10.18.46.104',22))

# 使用刚才的传输对象创建一个传输文件的的连接对象
transport.connect(username='root', pkey=private_key)

sftp = paramiko.SFTPClient.from_transport(transport)

# 将location.py 上传至服务器 /tmp/test.py
sftp.put('回顾', '/tmp/回顾.txt')

# 将远程主机的文件 /tmp/test.py 下载到本地并命名为  some.py
sftp.get('/tmp/回顾.txt', 'some.txt')

transport.close()
上一篇下一篇

猜你喜欢

热点阅读