You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在本地Python程序中读取远程SSH服务器上的文件

实现通过SSH读取远程服务器auth.log文件的方案

核心修改点

  • 替换执行命令:将原代码中的ls /var/log/替换为cat /var/log/auth.log,直接读取目标文件内容
  • 修正语法错误:原代码存在缩进问题,Python函数内的代码必须统一缩进,否则会报错
  • 权限兼容(可选):如果auth.log需要管理员权限,需使用sudo cat /var/log/auth.log并处理密码输入

完整修正后的代码

import tkinter as tk
import paramiko

def setup_ssh_client():
    print("establishing ssh connection....")
    client = paramiko.client.SSHClient()
    client.load_system_host_keys()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    # 替换为读取auth.log的cat命令
    com = "cat /var/log/auth.log"
    # 如果需要sudo权限,改用下面的命令(需处理密码输入)
    # com = "sudo cat /var/log/auth.log"
    client.connect(hostname="192.168.1.23", username="kmzpl", password="kilers1238!", port=22)
    output = ""
    stdin, stdout, stderr = client.exec_command(com)
    
    # 处理sudo密码输入(如果使用sudo命令则取消注释)
    # stdin.write("kilers1238!\n")
    # stdin.flush()
    
    print("ssh successful. Closing connection")
    stdout_lines = stdout.readlines()
    # 同时读取错误输出,排查问题
    stderr_lines = stderr.readlines()
    client.close()
    print("Connection closed")

    print("命令输出:")
    for line in stdout_lines:
        output += line
    if output:
        print(output)
    else:
        print("没有命令输出")
    
    # 打印错误信息(如果有)
    if stderr_lines:
        print("错误信息:")
        print(''.join(stderr_lines))

window = tk.Tk()
connectButton = tk.Button(window, text="Connect", width=6, command=setup_ssh_client)
connectButton.pack()
window.mainloop()

额外说明

  • 如果使用sudo命令,必须取消注释stdin.write和stdin.flush部分,将密码写入标准输入,否则命令会卡住等待输入
  • 增加了错误输出的读取和打印,方便排查命令执行失败的原因(比如权限不足)

内容的提问来源于stack exchange,提问作者kmzpl

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 13:35:31