上一篇:https://www.cnblogs.com/apff/p/9484939.html(python如何实现普通用户登录服务器后切换到root用户再执行命令遇到的错误解决 )

接上一篇,前两篇解决中文的问题主要是在字符集上做的手脚,即将中文转成英文,但是有一种情况我们都来不及做转换,即登录时服务器直接返回了中文内容:

此时程序报了如下错误,其实还是字符集问题:

为此:我们可以在接收数据的时候直接对其进行异常捕捉,如果异常则换一种解码方式:

def verification_ssh(host,username,password,port,root_pwd,cmd):
s=paramiko.SSHClient()
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
s.connect(hostname = host,port=int(port),username=username, password=password) if username != 'root':
ssh = s.invoke_shell()
time.sleep(0.1) #先判断提示符,然后下一步在开始发送命令,这样大部分机器就都不会出现问题
buff = ''
while not buff.endswith('$ '):
resp = ssh.recv(9999)
try: #进行异常捕捉,如果解码有问题,则换一种解码方式
buff += resp.decode('utf8')
except Exception as e:
buff += resp.decode('gb18030')
print(resp)
time.sleep(0.1)
print('获取登录后的提示符:%s' %buff) ssh.send(' export LANG=en_US.UTF-8 \n') #解决错误的关键,编码问题
ssh.send('export LANGUAGE=en \n') ssh.send('su - \n') buff = ""
while not buff.endswith('Password: '): #true
resp = ssh.recv(9999)
print(resp)
buff +=resp.decode('utf8') print('hhhhh')
print(buff) ssh.send(root_pwd)
ssh.send('\n') buff = ""
# n = 0
while not buff.endswith('# '):
# n += 1
resp = ssh.recv(9999)
print(resp)
buff +=resp.decode('utf8')
# print(n)
# if n >=3:
# break # print(buff) ssh.send('sh /tmp/check/101.sh') #放入要执行的命令
ssh.send('\n')
buff = ''
# m = 0
while not buff.endswith('# '):
resp = ssh.recv(9999).decode()
buff +=resp
# m += 1
# print(m) result = buff
# print(type(result))
# print(result)
s.close() if __name__ == "__main__":
verification_ssh('测试IP地址', '普通账号', '普通账号的密码', '52222', 'root密码', 'id')

彻底解决ssh.invoke_shell() 返回的中文问题的更多相关文章

  1. 第三篇:彻底解决ssh.invoke_shell() 返回的中文问题

    接上一篇,前两篇解决中文的问题主要是在字符集上做的手脚,即将中文转成英文,但是有一种情况我们都来不及做转换,即登录时服务器直接返回了中文内容: 此时程序报了如下错误,其实还是字符集问题: 为此:我们可 ...

  2. 如何解决http请求返回结果中文乱码

    如何解决http请求返回结果中文乱码 1.问题描述 http请求中,请求的结果集中包含中文,最终以乱码展示. 2.问题的本质 乱码的本质是服务端返回的字符集编码与客户端的编码方式不一致. 场景的如服务 ...

  3. 解决@ResponseBody注解返回的json中文乱码问题

    1. 简介 主要解决@ResponseBody注解返回的json中文乱码问题. 2.解决方案 2.1mvc加上注解(推荐此方法) 在mvc配置文件中假如下面配置(写在 <mvc:annotati ...

  4. 解决springmvc使用ResponseBody注解返回json中文乱码问题

    spring版本:4.2.5.RELEASE 查看“org.springframework.http.converter.StringHttpMessageConverter”源码,中有一段说明: B ...

  5. 【Linux利用远程SSH连接】SecureCRT中文出现乱码解决办法 Linux服务器技术

    1. 修改远程linux机器的配置   vim /etc/sysconfig/i18n   把LANG改成支持UTF-8的字符集   如:   LANG="zh_CN.UTF-8″   或者 ...

  6. 解决SSH显示中文乱码的问题(cent os7)

    用SSH连接服务器显示中文乱码,试过修改SSH端,不成功.这次从服务器端下手 1.先查看服务器现有的字符集 [root@dm01 ~]# locale -a 在结果中找到 如果没有支持的字符集就需要安 ...

  7. 第二篇:ssh.invoke_shell() 切换root出现的新问题

    接上一篇:按照上一篇的方式,在没有对ssh.invoke_shell()执行后的登录提示符进行判断的话,那边有部分机器就回因为返回为空导致程序卡死. 正常机器  ssh.recv(9999)  命令返 ...

  8. 解决Fiddler查看Post参数中文乱码的问题

    解决Fiddler查看Post参数中文乱码的问题 解决方法: 1.win+R 2.打开注册表编辑器:输入regedit +回车+是 3.HKEY_CURRENT_USER\Software\Micro ...

  9. 解决URL地址中的中文乱码问题的办法

    解决URL地址中的中文乱码问题的办法 引言: 在Restful类的服务设计中,经常会碰到需要在URL地址中使用中文作为的参数的情况,这种情况下,一般都需要正确的设置和编码中文字符信息.乱码问题就此产生 ...

随机推荐

  1. Mariadb之事务隔离级别

    上一篇我们聊到了mariadb的锁,以及怎么手动加锁和解锁等等,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13196905.html:今天我们来聊一聊mar ...

  2. 正确卸载vs2015及以前版本方式

    官网工具:https://github.com/Microsoft/VisualStudioUninstaller/releases 亲自测试过,很好用. (完)

  3. Java NIO之Buffer的使用

    目录 Buffer简介 Buffer的核心属性 Buffer的创建与使用(ByteBuffer为例) 总结 参考资料 Buffer简介 缓冲区(Buffer):本质上是一个数组,用于临时保存.写入以及 ...

  4. 面向切面对象AOP

    前言 面向切面编程(思想)AOP Aspect Oriented  Programming,是面向对象基础上 更关注最终目标 而不关注中间的小目标,简而言之,就是我们的目标(例如constroller ...

  5. 转载之html特殊字符的html,js,css写法汇总

    箭头类 符号 UNICODE 符号 UNICODE HTML JS CSS HTML JS CSS ⇠ &#8672 \u21E0 \21E0 ⇢ &#8674 \u21E2 \21E ...

  6. 图形处理:给 Canvas 文本填充线性渐变

    作者:凹凸曼 - Barrior 在 Canvas 中对文本填充水平或垂直的线性渐变可以轻易实现,而带角度的渐变就复杂很多:就好像下面这样,假设文本矩形宽为 W, 高为 H, 左上角坐标为 X, Y. ...

  7. CentOS7下安装Docker《超详细新手教程》

    1.使用 root 权限登录 Centos.确保 yum 包更新到最新. sudo yum update 2.卸载旧版本(如果安装过旧版本的话) sudo yum remove docker dock ...

  8. js 整理 前端知识点 前端面试题 (2020)(vue)

    数据类型 字符串(String).数字(Number).布尔(Boolean).对空(Null).未定义(Undefined).Symbol. 引用数据类型:对象(Object).数组(Array). ...

  9. scala 数据结构(二):数组

    1 数组-定长数组(声明泛型) 第一种方式定义数组 这里的数组等同于Java中的数组,中括号的类型就是数组的类型 val arr1 = new Array[Int](10) //赋值,集合元素采用小括 ...

  10. java 面向对象(二):JVM内存结构

    编译完源程序以后,生成一个或多个字节码文件.我们使用JVM中的类的加载器和解释器对生成的字节码文件进行解释运行.意味着,需要将字节码文件对应的类加载到内存中,涉及到内存解析. <JVM规范> ...