该模块基于SSH服务用于连接远程服务器并执行相关操作
SSHClient
用于连接远程服务器并执行基本命令
import paramiko
#创建SSH对象
ssh = paramiko.SSHClient()
#允许连接不在know_hosts文件中的主机
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
#连接服务器
ssh.connect(hostname='192.168.0.200', port=22, username='root', password='123456')
#执行命令
stdin, stdout, stderr = ssh.exec_command('ifconfig')
#获取命令结果
result = stdout.read()
# res,err = stdout.read(), stderr
# result = res if res else err #三元运算
print(result.decode())
#关闭连接
ssh.close()
SFTPClient
用于连接远程服务器并执行上传下载
import paramiko
transport = paramiko.Transport(('192.168.0.200',22))
transport.connect(username='root', password='123456')
sftp = paramiko.SFTPClient.from_transport(transport) #将连接对象传递其处理
#sftp = paramiko.SFTPClient.from_transport(ssh.get_transport())
#即新建一个SFTPClient对象,该对象复用之前的SSH连接,因此,我们使用sftp传输文件时,不需要再次进行用户认证。
#上传文件到服务器 /tmp/test
sftp.put('file_test', '/tmp/test')
#下载文件
sftp.get('/tmp/test.py', 'test2')
transport.close()
基于公钥密钥上传下载
(对于windows,可将一个与服务端建立SSHkey的私钥copy过来从而跟服务端进行无密码登录)
import paramiko
private_key = paramiko.RSAKey.from_private_key_file('rsa_file')
transport = paramiko.Transport(('192.168.0.200',22))
transport.connect(username='root', pkey= private_key)
sftp = paramiko.SFTPClient.from_transport(transport) #将连接对象传递其处理
#上传文件到服务器 /tmp/test
sftp.put('file_test', '/tmp/test')
#下载文件
# sftp.get('/root/.ssh/id_rsa', 'ras_file')
transport.close()
类 Fabric 主机管理程序开发:
- 运行程序列出主机组或者主机列表
- 选择指定主机或主机组
- 选择让主机或者主机组执行命令或者向其传输文件(上传/下载)
- 充分使用多线程或多进程
- 不同主机的用户名密码、端口可以不同
https://github.com/jinboxu/multiple-pc-manager-program/tree/master