WebSSH操作物理机或虚拟机

本文介绍了如何使用Django和Paramiko模块实现WebSSH,让用户通过浏览器远程操作物理机和虚拟机。文章详细阐述了数据流、SSH连接的建立,包括账号密码和密钥认证,并提供了具体的代码示例,展示了如何处理终端窗口大小的动态调整。
摘要由CSDN通过智能技术生成

  Django实现WebSSH操作Kubernetes Pod文章发布后,有小伙伴说咖啡哥,我们现在还没有用上Kubernetes,但我想通过浏览器连接我们的物理机和虚拟机该怎么办?
  
  这就比较简单了,既然我们已经实现了浏览器操作Kubernetes的Pod,那么想想操作Pod和物理机虚拟机有什么区别呢?
  
  整个数据流是一点没变:用户打开浏览器--》浏览器发送websocket请求给Django建立长连接--》Django与要操作的服务器建立SSH通道,实时的将收到的用户数据发送给SSH后的主机,并将主机执行的结果数据返回给浏览器
  
  唯一不一样的地方就是Django与要操作的服务器建立SSH通道的方式,在Kubernetes中是通过Kubernetes提供的API建立的Stream流,而操作物理机或者虚拟机的时候我们可以使用Paramiko模块来建立SSH长连接隧道,Paramiko模块建立SSH长连接通道的方法如下:
  
  # 实例化SSHClient
  
  ssh = paramiko.SSHClient()
  
  # 当远程服务器没有本地主机的密钥时自动添加到本地,这样不用在建立连接的时候输入yes或no进行确认
  
  ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  
  # 连接SSH服务器,这里以账号密码的方式进行认证,也可以用key
  
  ssh.connect(hostname=host, port=port, username=username, password=password, timeout=8)
  
  # 打开ssh通道,建立长连接
  
  transport = ssh.get_transport()
  
  self.ssh_channel = transport.open_session()
  
  # 获取ssh通道,并设置term和终端大小
  
  self.ssh_channel.get_pty(term=term, width=cols, height=rows)
  
  # 激活终端,这样就可以正常登陆了
  
  self.ssh_channel.invoke_shell()
  
  连接建立,可以通过如下方法给SSH通道发送数据
  
  self.ssh_channel.send(data)
  
  当然SSH返回的数据也可以通过如下方法持续的输出给Websocket
  
  while not self.ssh_channel.exit_status_ready():
  
  # SSH返回的数据需要转码为utf-8,否则json序列化会失败
  
  data = self.ssh_channel.recv(1024).decode('utf-8','ignore')
  
  if len(data) != 0:
  
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值