python - if 条件基于读取 paramiko 通道缓冲区
问题描述
我已经修改了代码并使用 paramiko 重新发布,我以 normal_user 身份登录并在多个服务器上执行“sudo su -”。很少有服务器 normal_user 具有 NOPASSWD 选项的 sudo 访问权限,其中不要求 root 访问密码。少数服务器 normal_user 具有 sudo 访问权限并询问密码。少数服务器 normal_user 不在 sudoers 文件中。但是当 sudo su - 给出时,它会询问密码,然后告诉用户不在 sudoers 文件中
下面是我的代码。如果用户被要求输入 sudo 密码并且即使不要求密码也可以工作,当用户不在 sudoers 文件中时脚本不可用。它应该报告“normal_user 不在 sudoers 文件中。将报告此事件。” pss 建议
import paramiko
import time
import sys
import os
User_name=raw_input('Enter User name: ')
Pass_word=raw_input('Enter the password: ')
cmd=raw_input('Enter the command: ')
def node_shell(hostname, site_user, site_passwd):
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy( paramiko.AutoAddPolicy() )
try:
ssh.connect(hostname, username=site_user, password=site_passwd, timeout=3)
transport = ssh.get_transport()
transport.set_keepalive(1)
while True:
try:
channel = ssh.invoke_shell()
channel.settimeout(60)
channel.send('sudo su -' + '\n')
buff = ''
while not (buff.endswith(User_name + ': ') or buff.endswith('# ')):
resp = channel.recv(9999)
buff += resp
time.sleep(2)
if buff.endswith(User_name + ': '):
channel.send('mm' + '\n')
buff=''
while not (buff.endswith('# ') or buff.endswith('reported. ')):
resp = channel.recv(9999)
buff += resp
time.sleep(5)
if buff.endswith('reported. '):
resp = channel.recv(9999)
buff += resp
time.sleep(2)
print "User does not have sudo access"
sys.exit(1)
channel.send(cmd + '\n')
buff = ''
while not buff.endswith('# '):
resp = channel.recv(9999)
buff += resp
time.sleep(5)
return buff
except Exception as e:
print("ERROR: s failed: %s" % (hostname, e))
except Exception as e:
print("%s: failed to login : %s" % (hostname, e))
ssh.close()
return
解决方案
推荐阅读
- html - 在另一个包含不同表单的 cgi 脚本中使用表单值
- node.js - 无法通过 mongo compass 创建数据库
- python - 在 Django 中创建自定义 FileField 数据类型
- php - add-apt-repository ondrej/php 用于旧的 ubuntu 版本 (14) 和 php 7.0
- python - 如何在pyspark的一列上应用窗口函数?
- c++ - 在 Slot 中传递多个参数
- java - 使用 Java 与数据库进行数据更新
- mongodb - 当MongoDB集合没有数据时,对$project数据进行操作
- java - 替换属性 data-image-src 的值
- r - 使用 rlang 从向量中获取不带引号的变量名