批量修改多台设备密码

来源:互联网 发布:原声吉他音箱 知乎 编辑:程序博客网 时间:2024/06/05 12:50

批量修改多台设备密码

一、关于linux密码
         密码的强度取决于加密算法的强度和密码串的长度、复杂性和不可预知性。linux 系统采用非常安全的NBS DES(美国国家标准局的Data Encryption Standard)加密算法。
密码的复杂性:一般来说,密码至少需要6-8 个字符,并且包含大小写字母、数字、特殊字符。
密码破解的方式:1、暴力破解。   2、密码的保管。

SSH 登陆系统2 种通用方法:1、用户名密码方式  2、publickey 的方式,可避免输入密码

二、采用publickey方式自动管理多台设备(自动批量修改的基础)
采用publickey 方式,需提前建立管理机和server 之间的信任关系
1、在管理机配置操作
创建隐藏的.ssh 目录
ljl@120:~$ mkdir /home/ljl/.ssh
生成公钥私钥对
ljl@120:~$ ssh-keygen 参数默认即可,一路回车确认即可。默认参数采用rsa 类型的2048位来创建key。
将管理机上生成的公钥拷贝到其他被管理servers 相应用户的.ssh 目录下,并改名为authorized_keys。
ljl@120:~$ scp -P6120 /home/ljl/.ssh/id_rsa.pub
ljl@192.168.0.140:/home/ljl/.ssh/authorized_keys
这样以后就可以在管理机上不用输密码以ljl 用户的身份ssh 登陆server 了。
2、管理机不输密码ssh远程执行命令
通过ssh 远程执行命令的方法:ssh ip cmd
如果需要远程执行不止一条命令的话,必须把要执行的命令用单引号或双引号括起来,如ssh ip "cd /home/zhang && ls"
在多台服务器上执行相同的命令,可以写个脚本循环一下: for i in $(seq 1 254);do ssh192.168.0.$i uname -a;done
$ for i in 140 180;do ssh -p6120 192.168.0.$i 'echo $(date) && uname -a && echo " "';done

三、批量修改密码的方式
批量修改linux 密码的几种方式:
第一种:
echo "123456" | passwd --stdin root
优点:方便快捷
缺点:如果你输入的指令能被别人通过history 或者其他方式捕获,那么这样的方式是很不安全的,更重要的是如果密码同时含有单引号和双引号,那么则无法通过这种方法修改。debian 不支持passwd 命令使用--stdin 参数, debian 官方bug 跟踪系统有提到http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=525153,维护者建议采用支持批处理模式的chpasswd。

第二种:
a. 首先将用户名密码一起写入一个临时文件.
cat chpass.txt
root:123456
zhaohang:123456
b. 使用如下命令对用户口令进行修改:
chpasswd < chpass.txt
c. 可以使用123456 来登录系统,密码修改完毕.
优点:可以很快速方便的修改多个用户密码
缺点:明文密码写在文件里仍然显得不够安全,但是避免了第一种修改方式不能有特殊字符串密码的情况.chpasswd 虽然可以批量修改密码,但需要root 权限,而我们的系统是禁止root 用户远程ssh登陆的,所以这种方式不适合。

第三种:
通过expect 来实现交互模式下的脚本自动运行。
Expect 是Unix 系统中用来进行自动化控制和测试的软件工具,由Don Libes 制作,作为Tcl脚本语言的一个扩展,应用在交互式软件中如telnet,ftp,Passwd,fsck,rlogin,tip,ssh等等。该工具利用Unix 伪终端包装其子进程,允许任意程序通过终端接入进行自动化控制;也可利用Tk 工具,将交互程序包装在X11 的图形用户界面中。
注:Tcl(最早称为“工具命令语言”"Tool Command Language",但是目前已经不是这个含义,不过我们仍然称呼它为TCL)是一种脚本语言。
$ more auto_change_passwd.exp
#!/usr/bin/expect -f
set ip [lindex $argv 0]
set ljl "ljl"
set root "root"
set ljl_newpass ""
set root_newpass ""
set ljl_oldpass ""
set timeout 5
spawn ssh -p6120 ljl@$ip
##登陆shell,并sudo 到root
expect "$"
send "sudo -s\r"
#expect "ljl:"
#send "$ljl_oldpass\r"
##修改ljl 的密码
expect "#"
send "passwd $ljl\r"
expect "password:"
send "$ljl_newpass\r"
expect "password:"
send "$ljl_newpass\r"
#修改root 的密码
send "passwd $root\r"
expect "password:"
send "$root_newpass\r"
expect "password:"
send "$root_newpass\r"
##修改完后退出
expect "#"
send "exit\r"
expect "$"
send "exit\r"
expect eof
exit
$ more auto_change_passwd_do.sh
#!/bin/bash
log=/home/ljl/auto/auto_change_passwd.log
cat ip_list.txt|while read line
#循环修改ip_list.txt 中的密码
do
echo "####################$(date) changing $line 's user password ################"
>>$log
expect auto_change_passwd.exp $line >>$log
echo "" >>$log
echo "" >>$log
done

四、其他批量操作步骤类似,编写相应脚本即可轻松实现。

 

原创粉丝点击