使用prarmiko模块切换root执行命令

使用prarmiko模块切换root执行命令

ID:42621492

大小:15.53 KB

页数:6页

时间:2019-09-19

使用prarmiko模块切换root执行命令_第1页
使用prarmiko模块切换root执行命令_第2页
使用prarmiko模块切换root执行命令_第3页
使用prarmiko模块切换root执行命令_第4页
使用prarmiko模块切换root执行命令_第5页
资源描述:

《使用prarmiko模块切换root执行命令》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、Paramiko模块是非常优秀的ssh连接库。通常使用paramiko.SSHClient类型的exec_command来执行命令,返回一个包含了代表标准输入、标准输出、标准错误的三个元素的元祖。通过操作这三个ChannelFile对象可以获取到命令的标准输出,以及命令的退出状态,并且如果命令没有执行完成,获取标注输出或退出状态时,进程将被阻塞,直到命令执行完成,还可以使用标准输入完成简单的交互操作,具体的使用方式,参见Paramiko使用exec_command很方便,但也有不足之处,很多linux环境都是禁止root直接登录的,而使用exec_command无法完成su–root这种

2、交互方式的切换命令,执行时进程将被永久阻塞。invoke_shell方法,用于创建一个子shell进程,这样所有的操作都可以在该子shell中进程,su切换用户操作不受影响,但该方法没有exec_command那种方便的ChannelFile对象,所有的标准输出和标准错误内容通过invoke_shell返回对象的recv方法来获取,每一次调用recv只会从上一次返回的地方开始返回,也没有直接获取命令退出状态的方法,不过这些缺点可以通过代码来实现。importparamikoimporttimedef_shell_exec(shell,cmd,sleep,is_exec=True):ifi

3、s_exec:#执行shell命令shell.send(cmd+'')time.sleep(sleep)#recv方法返回收集到的shell命令的标准输出和标准错误。#参数为返回多少个自己节数的标准输出和标准错误,值应该大于实际的返回,这样才能保证输出的完整stdout=shell.recv(1024*100)#按行分割得到的信息out_list=stdout.decode().split('')returnout_listdefmain():ssh=paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.Miss

4、ingHostKeyPolicy())ssh.connect('192.168.1.28',22,'test','huawei')#invoke_shell方法,创建一个子shell,所有的命令都在该shell中进行。shell=ssh.invoke_shell()print('Begintosuroot...')out_list=_shell_exec(shell,'su-root',1)last_str=out_list[len(out_list)-1].strip()#获取的linux系统的标准输出和标准错误按行分割后#第一行内容为传递的linux命令,最后一行在无交互时,内容应该

5、为PS1变量的值#否则应该是交互的输出信息,切换root为交互操作,最后一行的内容应该为"Password:"ifnotlast_str.endswith('Password:'):raiseValueError("Failedtoexecsuroot")out_list=_shell_exec(shell,'huawei',5)result_str=out_list[len(out_list)-2].strip()#输入密码后,交互完成,此时最后一行应该为PS1变量的值#单数第二行如何出现failure内容,则表示root密码输入错误,切换失败ifresult_str.endswith

6、('failure'):raiseValueError("Authenticationfailure,pleasecheckroot'spassword")print('Successfully')cmd_list=list()#第一条命令是更改PS1变量,即标识符的样式#每条命令执行完成后,都会返回到标识符,通过判断命令输出的最后是否等于PS1即可判断命令是否执行完成cmd_list.append('exportPS1="[\u]#";echo$?')cmd_list.append('whoami;echo$?')cmd_list.append('pwd;echo$?')cmd_li

7、st.append('cd/opt;bashtest.sh;echo$?')cmd_list.append('cd/opt;bashtest2.sh;echo$?')cmd_list.append('pwd;echo$?')#逐条执行数组中的命令print('Begintoexeccommand...')forcmdincmd_list:print('"{0}"...'.format(cmd))out_list=list()#声明一

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。