批量修改多台裝置密碼

2021-05-28 01:16:50 字數 3310 閱讀 6372

批量修改多台裝置密碼

一、關於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...