抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

[toc]

python自动化之admin自动切换root

ssh登录系统,如果是非root帐号(普通帐号)登录采取行动,则su切换到root

#!/usr/env/bin python
# -*- coding:utf-8 -*-
# des:ssh登录系统,如果是非root帐号(普通帐号)登录采取行动,则su切换到root

# python 的SSHV2 protocol协议实现,用于python调用各种ssh功能;
import paramiko 
# python内置时间模块
import time 

#根据用户名密码从普通用户揽权到root用记执行给定命令

def ssh_su_root(ip,username,password,root_pwd,cmd):
#建立SSHClient对象
    myssh = paramiko.SSHClient()
#设置自动接收公钥
    myssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    try:
#使用给定用户名密码尝试连接服务器
         myssh.connect(ip, 22, username=username, password=password, timeout=4)
    except Exception, ex:
        print str(ex)
        return
    # 如果默认root不允许远程登录,提供的是普通用户帐号+root帐号,
    #则调用invoke_shell,使用交互式shell方式切换同到root帐号,并执行命令。
    if username != 'root':
        print "I am NOT root"
        ssh = myssh.invoke_shell()
        time.sleep(0.2)
        ssh.send('su -\n')
        buff = ''
    #循环检测密码输入提示,出现后发送root口令,
        while not (buff.endswith('Password:') or buff.endswith('密码: ')):
    #从接收缓存中读入最多9999bytes数据。
            resp = ssh.recv(9999)
            buff += resp 
        ssh.send(root_pwd)
        ssh.send('\n')
        buff = ''
    #循环检测#提示符,出现后执行传入的命令。
        while not buff.endwith('# '):
            resp = ssh.recv(9999)
            buff += resp 
        ssh.send[cmd]
        ssh.send('\n')

        buff =''
    #循环检测#提示符,意味着命令执行完成,出现后关闭ssh连接并输出结果。
        while not buff.endswith('# '):
            resp = ssh.recv(9999)
            buff += resp
        myssh.close()
        result = buff
        print "su root result --->",result 

        myssh.close()
    else:
    #如果提供的是root帐号,则直接调用paramiko exec_command 方法,执行命令。

        print "I am root"
        stdin, stdout, stderr = myssh.exec_command(cmd)
        stdin,write("Y")
        print "stdout.readlines() --->", stdout.readlines()
        myssh.close()

if __name__ == "__main__":
    cmd = 'date'
    ip = 'xx.xxx.xx.xxx'
    username = 'admin'
    password = 'xxxxxxxxxx'
    ssh_su_root(ip, username, password, 'xxxxxxxxxxxx', cmd)
    username = 'root'
    ssh_su_root(ip, username, password, 'xxxxxxxxxxxx', cmd)

评论