paramiko创建可交互的ssh会话

paramiko创建可交互的ssh会话

python使用paramiko的SSHClient创建的ssh会话可以轻松的执行shell命令并获取结果,但是也存在一些不足,我想要执行history命令,却发现得不到预期的history的输出,然后我了解到可以使用SSHClient的invoke_shell()函数获取一个可交互的会话,通过简单的包装,可以实现一个使用可交互式会话执行shell命令并获取执行结果的函数

import time
import paramiko
def invoke_shell_exec(cmd) :
hostname = '192.168.1.1'
username = 'root'
ssh = paramiko.SSHClient()
ssh.load_system_host_keys()
ssh.connect(hostname=hostname, username=username)
channel = ssh.invoke_shell() #获取可交互式会话
channel.settimeout(10) #设置超时抛出异常
buff = ''
msg = ''
#会话连接后先获取一下远程服务器返回的登录信息
while not (buff.endswith('# ') or buff.endswith('$ ')) :
resp = channel.recv(1024)
buff += resp.decode()
msg += buff
#获取完登录信息后再发送shell命令
while True :
if channel.send_ready() :
channel.send(cmd.encode())
break
time.sleep(0.1)
#再获取一下shell命令的执行结果
buff = ''
while not (buff.endswith('# ') or buff.endswith('$ ')) :
resp = channel.recv(1024)
buff += resp.decode()
msg += buff
channel.close()
result = msg.split('\n')
return result
posted @   realzhangsan  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示