基于SSH的Python实现:提取远程监控文件指定传感器最新值
用Python实现带密码的SSH远程数据提取
我来帮你把那段bash脚本转换成Python版本,完美适配你的需求——不用完整下载大文件,直接在远程服务器上过滤出指定传感器的最新数值,再写入本地文件供后续使用。
首先,我们需要用到paramiko这个Python SSH库,它能帮我们轻松处理密码认证的SSH连接。先安装它:
pip install paramiko
接下来是完整的Python代码,我加了详细注释,方便你理解和修改:
import paramiko # 配置参数,根据你的实际情况修改 SSH_HOST = "192.168.101.53" SSH_USER = "keysight" # 远程服务器的用户名 SSH_PASSWORD = "iHEM_MT17" # SSH连接密码 SENSOR_PATTERN = "SP_t_5_roh" # 要查找的传感器名称 LOCAL_OUTPUT_PATH = "/run/user/1000/temperaturtest.txt" try: # 创建SSH客户端实例 ssh_client = paramiko.SSHClient() # 自动添加远程主机的密钥(避免第一次连接时的手动确认) ssh_client.set_missing_host_key_policy(paramiko.AutoAddPolicy()) # 建立SSH连接 ssh_client.connect(SSH_HOST, username=SSH_USER, password=SSH_PASSWORD) # 执行远程命令,完全复刻原bash脚本的逻辑: # 先执行keysight命令输出监控数据,再过滤指定传感器行→提取第4个字段→取最后一行(最新数值) command = f'keysight | egrep "{SENSOR_PATTERN}" | cut -d" " -f4 | tail -n 1' stdin, stdout, stderr = ssh_client.exec_command(command) # 获取命令输出,去掉多余的换行符和空白字符 latest_value = stdout.read().decode().strip() # 检查是否有错误输出 error_msg = stderr.read().decode().strip() if error_msg: print(f"远程命令执行出错: {error_msg}") else: # 将结果写入本地文件 with open(LOCAL_OUTPUT_PATH, "w") as f: f.write(latest_value) print(f"成功获取最新数值: {latest_value},已写入文件 {LOCAL_OUTPUT_PATH}") finally: # 确保SSH连接关闭,避免资源泄漏 if ssh_client.get_transport() is not None and ssh_client.get_transport().is_active(): ssh_client.close()
关键说明:
- 参数灵活修改:开头的几个变量你可以根据实际场景调整,比如更换传感器名称、本地输出路径,或者修改远程服务器的连接信息。
- SSH连接安全:
set_missing_host_key_policy是为了测试方便,如果你需要更严格的安全策略,可以提前把远程主机的密钥添加到本地known_hosts文件,然后移除这行代码。 - 命令逻辑兼容:完全对齐原bash脚本的处理流程,确保结果和之前一致。如果你的监控数据是来自某个静态文件而非
keysight命令,只需要把命令里的keysight换成cat /path/to/your/datafile即可。 - 资源安全:用
try-finally块保证无论连接成功与否,都会关闭SSH连接,避免长期占用资源。
内容的提问来源于stack exchange,提问作者Muthu Alagappan Narayanan
相关产品推荐
相关产品推荐

