银河国际点击登录:切换root出现的新问题,终端中文乱码

接上一篇:依照上一篇的章程,在并未有对ssh.invoke_shell()实行后的报到提醒符实行判别的话,那边有一点点机器就回因为重返为空导致程序卡死。

方法一:
修改/etc/sysconfig/i18n 文件
把内部的LANG=”en_US”改成 GB2312就能够了
要重启一下机械
不用重启的法子,间接
# LANG=”GB2312″
然后就足以了
修改 i18n 只是为了重启有效
方法二:
#vi ~/.bash_profile
LANG=zh_CN.GB18030
LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN
export LANG LANGUAGE
诸如此比就会在终极输入和出示汉语了,况兼shell脚本里原本的汉语彰显乱码难点也消除了
方法三:
修改 /etc/sysconfig/i18n
第1句 LANG=”zh_CN.UTF-8″ 改为 LANG=”zh_CN.GB18030″
方法四:
修改 /etc/sysconfig/i18n
LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
       SUPPORTED=”zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en”
       SYSFONT=”lat0-sun16″
       SYSFONTACM=”8859-15″
方法五:
     [root@localhost ~]# service vsftpd restart
     ?抽. vsftpd锛                                            [ 纭..
]
     涓?vsftpd ?.. vsftpd锛                              [ 纭.. ]
     [root@localhost ~]# cd /etc/sysconfig/
     [root@localhost sysconfig]# cp i18n i18n.bak    #备份i18n文件
     [root@localhost sysconfig]# echo “” >i18n

常规机器  ssh.recv(9999)  命令归来内容:

     [root@localhost sysconfig]# vi i18n      #加盟以下内容
     LANG=”zh_CN.GB18030″
     LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
    SUPPORTED=”zh_CN.GB18030:zh_CN:zh:en_US.UTF-8:en_US:en”
     SYSFONT=”lat0-sun16″
     重新连接后中文突显寻常
     [root@mail ~]# service vsftpd restart
     关闭 vsftpd:                                          [ 确定 ]
     为 vsftpd 启动 vsftpd:                            [ 确定 ]

b’Last login: Sat Aug 18 22:06:17 2018 from
172.37.100.111\r\r\n[cattsoft@ZB_KT_MAS2 ~]$ ‘
b’export LANG=en_US.UTF-8 \r\n[cattsoft@ZB_KT_MAS2 ~]$ export
LANGUAGE=en \r\n[cattsoft@ZB_KT_MAS2 ~]$ su – \r\nPassword: ‘

      程序的亦步亦趋登录进程如下(以下图片内容为ssh.recv(9999)
命令接收返回值解码后的结果):

 

   
 银河国际点击登录 1

前两日连接linux意况时,因为是新的生育遭受,所以布置不怎么全,ssh调控台展现的汉语都为乱码,从网络找了几个办法,本人用了退换有些目录的文本内容的格局,成功消除,在那与大家分享一下。

卓殊机器ssh.recv(9999)  命令归来内容:

用ssh连接上服务器,展开目录/etc/sysconfig,在那之中有个文本为:
i18n,在那之中的从头到尾的经过为

b’export LANG=en_US.UTF-8 \r\n’
b’export LANGUAGE=en \r\nsu – \r\nLast login: Sat Aug 18 21:42:09
from 172.16.112.2\r\n[cattsoft@trancache01 ~]$ ‘

[plain] view
plaincopyprint?

      程序的上行下效登录进程如下(以下图片内容为ssh.recv(9999)
命令接收重临值解码后的结果)

  1. <SPAN style=”FONT-SIZE: 18px”>LANG=”en_US.UTF-8″  
  2. SUPPORTED=”zh_CN.UTF-8:zh_CN:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en”  
  3. SYSFONT=”latarcyrheb-sun16″</SPAN>  

    LANG=”en_US.UTF-8″
    SUPPORTED=”zh_CN.UTF-8:zh_CN:zh:zh_TW.UTF-8:zh_TW:zh:en_US.UTF-8:en_US:en”
    SYSFONT=”latarcyrheb-sun16″

   
 银河国际点击登录 2

将内部的剧情改为了:

 

[plain] view
plaincopyprint?

如上,遵照原本的循环格局,循环无法肯定Password:地方,所以那些机器此时就回出现卡死现象,化解此主题素材的做法:在推行命令前,先决断二次登录符:“$”,然后在实行命令。

  1. <SPAN style=”FONT-SIZE: 18px”>LANG=”zh_CN.GB2312″  
  2. LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”  
  3. SUPPORTED=”zh_CN.GB18030:zh_CN.GB2312:zh_CN.UTF-8:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:ja”  
  4. SYSFONT=”lat0-sun16″  
  5. SYSFONTACM=”8859-15″</SPAN>  

    LANG=”zh_CN.GB2312″
    LANGUAGE=”zh_CN.GB18030:zh_CN.GB2312:zh_CN”
    SUPPORTED=”zh_CN.GB18030:zh_CN.GB2312:zh_CN.UTF-8:zh:en_US.UTF-8:en_US:en:ja_JP.UTF-8:ja_JP:ja”
    SYSFONT=”lat0-sun16″
    SYSFONTACM=”8859-15″

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)
            # print(resp)
            buff += resp.decode('utf8')
            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')

重启了一下服务器,连接后一切OK了!

 上一篇:(python怎么着落到实处普通客户登入服务器后切换成root客户再试行命令碰着的荒唐解决)

在这也备忘下其余的办法,不过没试过,咱们可以试试:

 

在极端施行命令:

export LC_ALL=zh_CN.GB2312;export LANG=zh_CN.GB2312是最平价的。

1.不灵光这种ssh顾客端,字体设定必得求设为能够体现粤语的字体。

2.远程的locale一定要安装为LANG=zh_CN.UTF-8

========================================
修改/etc/profile 

增添这一行
export LC_ALL=zh_CN.GBK

========================================

SSH呈现汉语乱码难题
(1)打开smb.conf
添加:

   display charset=cp936
    unix charset=cp936
    doc  charset=cp936

 

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website