Paramiko是一个用于Python的SSH(Secure Shell)客户端,它提供了在远程服务器上执行命令、上传和下载文件等功能。Paramiko模块具有跨平台性,易于使用,是许多Python开发者进行远程服务器操作的首选工具之一。
如何使用Paramiko模块
安装Paramiko
可以通过pip来安装Paramiko模块:
pip install paramiko
建立SSH连接
以下是一个简单的示例代码,演示了如何使用Paramiko模块建立SSH连接:
import paramiko #调用paramiko模块
ssh = paramiko.SSHClient() #创建了一个SSHClient对象并赋值给ssh,Paramiko.SSHClient为SSH 客户端类,用于远程连接 Linux 服务器并执行相关操作
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) #设置了一个策略,用于在首次连接到未知主机时自动添加主机密钥。这样可以避免出现未知主机的警告
ssh.connect('your_server_ip', username='your_username', password='your_password') #建立了SSH连接到指定的服务器。需要将 your_server_ip替换为实际的服务器IP地址,your_username替换为用户名,your_password替换为密码。
执行远程命令
一旦建立了SSH连接,可以使用Paramiko模块在远程服务器上执行命令,如执行ls -l查看:
stdin, stdout, stderr = ssh.exec_command('ls -l') #exec_command方法在远程服务器上执行命令,并返回三个流:stdin用于向命令发送输入(通常不使用),stdout包含命令的标准输出,stderr包含命令的错误输出。
print(stdout.read().decode()) ##打印执行结果,stdout 是一个文件对象,代表远程命令的标准输出流。read() 方法用于读取标准输出流中的内容。decode() 方法将读取的字节数据解码为字符串格式。
文件传输
Paramiko模块还可以用于文件传输,以下是一个简单的文件上传下载示例:
sftp = ssh.open_sftp()
sftp.put('local/file_path', 'remote/file_path')
sftp.get('remote/file_path','local/file_path')
sftp.close()
ssh.close()
实际案例分享
利用python脚本对172.16.5.223服务器执行巡检,简单脚本如下所示:
#引用paramiko模块
import paramiko
import time
# 创建SSH客户端,填写远程服务器的IP地址、用户名和密码
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect('172.16.5.223', username='root', password='1234')
# 执行Shell脚本
stdin, stdout, stderr = client.exec_command('''
{
echo "##CPU使用情况##"
function cpu(){
usedcpu=$(vmstat|awk '{if (NR==3)print $13+$14}')
IOwait=$(vmstat|awk '{if (NR==3)print $16}')
echo "cpu使用率$usedcpu%,IO等待响应$IOwait%"
}
cpu
echo "##内存使用情况##"
mem=$(free -h |grep Mem |awk '{print $2}')
free=$(free -h |grep Mem |awk '{print $4}')
used=$(free -h |grep Mem |awk '{print $3}')
echo "总内存为 $mem ,已使用$used ,剩余$free "
echo "##硬盘使用情况##"
disk=df -h |grep ^/dev
echo "磁盘使用情况如下:
$disk"} >/home/服务器巡检结果.txt
''')
time.sleep(10) # 等待10秒,等待脚本执行完成
#创建SFTP客户端
sftp = client.open_sftp()
# 下载文件
remote_path = f'/home/服务器巡检结果.txt'
local_path = r'C:UsersralapDesktop服务器巡检结果.txt' #注意为文件存储路径+文件名保存名
sftp.get(remote_path, local_path)
# 关闭SFTP连接
sftp.close()
# 关闭SSH连接
client.close()
执行结果如下:
其他语法使用可参考官网文档https://docs.paramiko.org/en/3.4/
原文始发于微信公众号(网络个人修炼):使用Python连接服务器并执行命令:Paramiko模块实践指南
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论