如何在本地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
相关产品推荐
相关产品推荐

