用paramiko批量修改root密码

需求:
服务器数量达到七百多台,由于前期管理不当,导致很多root用户密码不正确了。但庆幸的是拥有sudo权限的普通用户密码都是对的。现在需要使用普通用户批量修改root密码。

技术:
果断采用了python的paramiko来完成。主要是笔者实在不想写shell了。

难点:
sudo提权时如何输入密码
passwd执行时多次输入导致僵死问题

写代码:

import paramiko

def get_client(hostname, port, username, password):
    client = paramiko.SSHClient()
    client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    client.connect(hostname, port, username, password)
    return client

def exec_command(client, cmd, ssh_password):
    stdin, stdout, stderr = client.exec_command(cmd, get_pty=True)
    stdin.write(ssh_password+"\n")
    stdin.flush()
    out = stdout.read().decode().strip()
    if out != '':
        print(out)
    err = stderr.read().decode().strip()
    if err != '':
        print(err)


ip_list = []
f = open('server.txt')
for line in f.readlines():
    ip_list.append(line.strip())
f.close()

for index, ip in enumerate(ip_list):
    print('%s - %s' %(index, ip))
    client = None
    try:
        client = get_client(ip, 22, 'ssh_user', 'ssh_password')
        cmd_str = "echo new_root_password | sudo passwd --stdin root"
        exec_command(client, cmd_str, 'ssh_password')
    except Exception as e:
        print(e)
    finally:
        if client is not None:
            client.close()

server.txt里面就是一个个的ip列表,一个ip一行。
注意:通过echo方式修改密码,不是很安全。因为这条命令可能会被人在history中看到。记得清除记录history -c。
如果echo 字符里面带有“!”符号记得转义“!”否则会导致修改后的密码并不是你想要的值。

本博客采用 知识共享署名-禁止演绎 4.0 国际许可协议 进行许可

本文标题:用paramiko批量修改root密码

本文地址:https://jizhong.plus/post/2018/01/python-paramiko-batch-passwd.html