Paramiko 是用于实现执行远程命令和远程传输文件
安装
shell> pip3 install paramiko
执行命令
- 基于用户名和密码的连接
封装 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()
网友评论