#coding=utf8
import paramiko
import time
import logging '''
if user root,can not login,must use user xx and then switch to root not root ,then run ''' def _conn_root(ip,port,username,passwd,cmd):
s = paramiko.SSHClient()
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
#此处写入一个用于登录的用户
s.connect(hostname=ip, port=int(port), username='xx', password='xx')
except:
logging.info('err: can not conn %s ,pls check %s and password of xx',(ip,ip)) if username == 'root' or 'xx':
ssh = s.invoke_shell()
time.sleep(1)
if username=='xx':
ssh.send('su - xx\n')
else:
ssh.send('su -\n')
buff = ''
while not buff.endswith('Password: '):
resp = ssh.recv(2048)
buff += resp
ssh.send(passwd)
ssh.send('\n')
buff = ''
while not buff.endswith('# '):
resp = ssh.recv(2048)
buff += resp
ssh.send(cmd)
ssh.send('\n')
buff = ''
time.sleep(1)
resp = ssh.recv(2048)
resp = ''
while not buff.endswith('# '):
resp = ssh.recv(2048)
print resp
buff += resp
s.close()
result = buff
else:
stdin, stdout, stderr = s.exec_command(cmd)
result = stdout.read()
s.close() return result def _conn_nomal(ip,port,username,passwd,cmd):
s = paramiko.SSHClient()
s.load_system_host_keys()
s.set_missing_host_key_policy(paramiko.AutoAddPolicy())
try:
s.connect(hostname=host, port=int(port), username=username, password=password)
except:
logging.info('err: can not connect %s ,pls check %s and user && password',(ip,ip))
#'get result'
stdin, stdout, stderr = s.exec_command(cmd)
result = stdout.read()
s.close()
return result def Connect(ip,port=22,username='xx',passwd='xx',cmd='echo '): if username=='root' or 'xx':
return _conn_root(ip,port,username,passwd,cmd)
else:
return _conn_nomal(ip,port,username,passwd,cmd)

  

paramiko_su_root的更多相关文章

随机推荐

  1. 简单说一下 TCP打洞和UDP打洞

    1, TCP协议通信: 现在有两台电脑A和B.在 假设A的地址为 192.168.0.100 假设B的地址为 192.168.0.102 A想给B发送一个字符串Hello,  如果A,B之间采用TCP ...

  2. Matrix (二分套二分

    Given a N × N matrix A, whose element in the i-th row and j-th column Aij is an number that equals i ...

  3. JavaSE-19 IO

    学习要点 File类操作文件和目录的属性 字节流读写文件 字符流读写文件 字节流读写二进制文件 文件操作 1  文件的定义 文件可认为是相关记录或放在一起的数据的集合.文件一般保存在硬盘.U盘.光盘. ...

  4. 管理Fragments

    FragmentManager 为了管理Activity中的fragments,需要使用FragmentManager. 为了得到它,需要调用Activity中的getFragmentManager( ...

  5. LG-P1311选择客栈

    题目 暴力十分好想但你写不出来qwq 正解十分好写但你想不出来qaq 我们先读题,发现k其实没什么用 同时暴力枚举两个客栈的话会超时,所以只能同时枚举一个.我们枚举第二个客栈,然后用第二个客栈反推出前 ...

  6. 启发式合并 CodeForces - 600E

    启发式合并最重要的思想就是指的是每次将小集合拷贝合并至大集合.考虑每个元素的合并开销.对于合并次数最多的那个元素来说,它每合并一次,所在集合的规模扩大两倍,最多只会合并 logN 次,因而对于所有元素 ...

  7. 开发基本的php框架

    github路径:https://github.com/zhengchuzhou/easyPhpFramework 一.目录结构及用途 二.相关代码: 1.入口文件(index.php): <? ...

  8. 如何系统学习并且掌握JavaScript

  9. sql server 备份计划

    SSMS 1.管理 2.维护计划 3.维护计划向导 或者 1. server 代理 2. 作业 3. 新建作业 备份计划时间尽量选在闲时, 例如午夜

  10. sort 结构体 正数负数分开排序

    对于结构体排序的一点点记录,之前遇到过结构体排序,个人比较喜欢使用在结构体当中直接重载小于号的方法, 例如说: struct Node{ int index; int del; bool operat ...