python如何实现Linux服务器批量改密码?


#1

需求:需要修改一百多台服务器的密码。密码规则是Rfv%+主机名后3位。
同时服务器是需要先登录普通用户,再切换到root的。
如果是直接root用户登录,使用如下脚本即可。

#!/usr/bin/python
# -*- coding:utf-8 -*-  
#批量修改密码,密码规则为Rfv%+主机名后三位

import paramiko
import socket
import os

username='root'
password='a'
hostname='192.168.153.132'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,username=username,password=password)
setpass="Rfv5%"+socket.gethostname()[-3:]                                                            #获取主机名后3位赋值给setpass
stdin,stdout,sterr = ssh.exec_command('echo %s |passwd --stdin root'%(setpass))
print stdout.read()
ssh.close()

然后是需要su的,请大家指导下,怎么写?


#3
#!/usr/bin/python
# -*- coding:utf-8 -*-  
#批量修改密码,密码规则为Rfv%+主机名后三位

import paramiko
import socket
import os

username='toptea'
password='Cmos#2017'
hostname='192.168.153.132'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=hostname,username=username,password=password)
setpass="Rfv5%"+socket.gethostname()[-3:]
stdin,stdout,sterr = ssh.exec_command('sudo -S echo %s |passwd --stdin root'%(setpass),get_pty=True)
stdin.write('Cmos#2017'+'\n') 
print stdout.read()
ssh.close()

总觉得快成功了。执行结果
image


#4

Debian,ruby 2.4.2p198 测试通过.

require 'net/ssh'

host    = '10.0.1.14'
user    = 'test'
pw      = 'test1'
root_pw = 'mima'
result  = ''
cmd     = '"cat /root/1.txt"'
Net::SSH.start(host, user, password: pw) do |ssh|
  channel = ssh.open_channel do
    channel.on_data do |_ch2, data|
      if data =~ /^Password/
        channel.send_data "#{root_pw}\n"
      else
        result += data.to_s
      end
    end
    channel.request_pty
    channel.exec("su -c #{cmd}")
    channel.wait
  end
  channel.wait
end
puts result