ssh.invoke_shell() 切换root出现的新问题
程序员文章站
2022-03-18 15:36:47
接上一篇,前两篇解决中文的问题主要是在字符集上做的手脚,即将中文转成英文,但是有一种情况我们都来不及做转换,即登录时服务器直接返回了中文内容: 此时程序报了如下错误,其实还是字符集问题: 为此:我们可以在接收数据的时候直接对其进行异常捕捉,如果异常则换一种解码方式: 上一篇:ssh.invoke_s ......
接上一篇,前两篇解决中文的问题主要是在字符集上做的手脚,即将中文转成英文,但是有一种情况我们都来不及做转换,即登录时服务器直接返回了中文内容:
此时程序报了如下错误,其实还是字符集问题:
为此:我们可以在接收数据的时候直接对其进行异常捕捉,如果异常则换一种解码方式:
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() 切换root出现的新问题
注:转载请注明出处
上一篇: python 笔记整理
推荐阅读
-
解决mysql创建数据库后出现:Access denied for user 'root'@'%' to database 'xxx'的问题
-
Ubuntu 16.04无法切换root权限问题的解决
-
freebsd下切换到root下 su: Sorry 的解决办法
-
linux禁止普通用户切换至root用户的实例讲解
-
ubuntu使用root用户登录/切换root权限的实现
-
关于mysql主备切换canal出现的问题解决
-
deepin linux怎么切换到root权限? Deepin切换root用户的技巧
-
MySQL中出现Accessdeniedforuser'root'@'localhost'(usingpassword:YES)问题的解决方法
-
在linux shell脚本中root切换到普通用户执行脚本或命令的方法
-
Android界面切换出现短暂黑屏的解决方法