批量修改多台裝置密碼
一、關於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
[email protected]:/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 跟蹤系統有提到維護者建議採用支援批處理模式的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 中的密碼
doecho "####################$(date) changing $line 's user password ################"
>>$log
expect auto_change_passwd.exp $line >>$log
echo "" >>$log
echo "" >>$log
done
四、其他批量操作步驟類似,編寫相應指令碼即可輕鬆實現。
批量修改windows 使用者密碼
windows可以設定多個登入使用者。有時候需要對賬戶做密碼修改,一般情況下在 控制面板 中開啟 使用者賬戶 逐個修改密碼。如果需要修改多個密碼,就需要在 使用者賬戶 上切換多個使用者,並且每個使用者 都需輸入當前密碼 新密碼 確認新密碼 資訊 如下圖所示 比較繁瑣 我們可以採用通過dos命令方式建...
C 批量修改考勤裝置時間
自己工作中用到的小程式,每次遠行後批量改一次 如下 其中的zkemkeeper是中控的相關元件,因是系統元件,須要先註冊相關檔案後才有效 using system using system.collections.generic using system.text using zkemkeeper ...
linux批量新增使用者和批量修改密碼
一 批量建立使用者 通過命令newusers可以實現批量的建立使用者。這個命令的用法為 newusers file.txt 乙個文字檔案 文字檔案內存放需要批量新增的使用者資訊 但是對格式有要求 格式 pw name pw passwd pw uid pw gid pw gecos pw dir p...