使用Python连接服务器并执行命令:Paramiko模块实践指南

admin 2024年7月11日11:29:59评论41 views字数 2235阅读7分27秒阅读模式

Paramiko是一个用于Python的SSH(Secure Shell)客户端,它提供了在远程服务器上执行命令、上传和下载文件等功能。Paramiko模块具有跨平台性,易于使用,是许多Python开发者进行远程服务器操作的首选工具之一。

使用Python连接服务器并执行命令:Paramiko模块实践指南

如何使用Paramiko模块

安装Paramiko

可以通过pip来安装Paramiko模块:

pip install paramiko

使用Python连接服务器并执行命令: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客户端,实际调用Paramiko.SSHClient.open_sftp()sftp.put('local/file_path', 'remote/file_path') #上传文件sftp.get('remote/file_path','local/file_path')  #下载文件sftp.close() # 确保在文件传输完成后关闭SFTP会话ssh.close()  # 最后关闭SSH连接

实际案例分享

利用python脚本对172.16.5.223服务器执行巡检,简单脚本如下所示:

#引用paramiko模块import paramikoimport 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%"}cpuecho "##内存使用情况##"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 ^/devecho "磁盘使用情况如下:$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()

执行结果如下:

使用Python连接服务器并执行命令:Paramiko模块实践指南

其他语法使用可参考官网文档https://docs.paramiko.org/en/3.4/

使用Python连接服务器并执行命令:Paramiko模块实践指南

原文始发于微信公众号(网络个人修炼):使用Python连接服务器并执行命令:Paramiko模块实践指南

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月11日11:29:59
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   使用Python连接服务器并执行命令:Paramiko模块实践指南http://cn-sec.com/archives/2941793.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息