linux腳本批量創建用戶名和密碼

說明

如果你質疑自己,不確定命令是否正確或者不確定腳本是否能正常執行, 你可以先測試,測試方法就是 在命令行輸入 需要執行的命令,返回結果爲理想狀態就把命令放進腳本,並批量添加即可!
如:執行查詢賬號的其中一條

ssh 0.0.0.2 cat /etc/passwd|grep jtcj

正常以後在放進腳本並批量添加。

當然 有些有風險的操作還是建議先 測試一下,再放進腳本 對自己有自信固然是好事 但不要盲目自信。

先查詢是否有這賬號

可以忽略該步。
代碼(部分):

cat /etc/passwd | grep jtcj

ssh 0.0.0.2 cat /etc/passwd|grep jtcj
ssh 0.0.0.3 cat /etc/passwd|grep jtcj
ssh 0.0.0.4 cat /etc/passwd|grep jtcj
ssh 0.0.0.5 cat /etc/passwd|grep jtcj

修改爲創建用戶

全局替換而已: \ 轉義的意思。
也可以新建一個腳本,保留剛纔查看的那個腳本。
全局替換:%s/cat \/etc\/passwd|grep jtcj/useradd jtcjxz/g

代碼(部分):

cat /etc/passwd | grep jtcj

ssh 0.0.0..2 useradd jtcjxz
ssh 0.0.0.3 useradd jtcjxz
ssh 0.0.0.4 useradd jtcjxz
ssh 0.0.0.5 useradd jtcjxz

在這裏插入圖片描述

執行創建用戶腳本

方法:expect 腳本名在這裏插入圖片描述

創建(修改)密碼

沒密碼的就是創建,有密碼的就是修改。
腳本中不能用普通方法 passwd 直接更改,需要用echo 的方法,命令格式: echo newpasswd | passwd --stdin useradd(如果提示 --stdin unkown option,用方法二)
全局替換,也可以保留上一個腳本!

方法一

很明顯,我是方法一 不能用纔有了方法二! 平常自己用方法一就好! 但如果不是有很多服務器,還是老老實實用 passwd 修改密碼把 畢竟密碼不可見 更安全,也或者,echo修改後 history –c 清除一下也可,但這清除的並非文件中,-c清除了文件中也可以找到,用批量改密碼然後去刪乾淨記錄,也沒必要這麼折騰對吧,反正,知道echo 密碼 可能容易被別人看到的風險就好。不過如果不是root密碼 好像也沒那麼所謂對吧。

[root@controller01 ~]# echo Xz1@#Ty7 | passwd -–stdin jtxzcj
passwd: bad argument -–stdin: unknown option

提示我 --stdin 未知參數 ,what f!
見 方法二!!!

方法二

用chpasswd 修改,語法:echo user:newpasswd | chpasswd
親測 可以!如果再不行,而且不想一臺臺passwd 修改,就得用 expect 腳本完成了,方式1和2都不行的或者想玩下實驗的,可以見我博客中 expect命令詳解來玩玩。

 [root@controller01 ~]# echo jtcjxz:Xz1@#Ty7 |chpasswd 
[root@controller01 ~]# 
[root@controller01 ~]# su - jtcjxz 
Last login: Mon Apr  6 08:36:57 CST 2020 from 10.237.99.83 on pts/0
[jtcjxz@controller01 ~]$ su - jtcjxz 
Password: 
Last login: Wed Apr  8 03:03:50 CST 2020 on pts/1
[jtcjxz@controller01 ~]$ logout
[jtcjxz@controller01 ~]$ logout

雖然本地實現可以,但當我ssh 修改其他服務器的時候,發現 不支持 gssapiauth…
這個是ssh版本問題吧 也或許是 開啓了sapiauthentication 。

[root@controller01 ~]# ssh 0.0.0.2 echo jtcjxz:Xz1@#Ty7 |chpasswd 
/etc/ssh/ssh_config line 57: Unsupported option "gssapiauthentication"
 Authorized users only. All activity may be monitored and reported

解決方法就是

vi /etc/ssh/sshd_config

找到 下面兩行並註釋掉 ,然後重啓ssh服務:systemctl restart sshd(7.0及以上版本)
在這裏插入圖片描述
但如果我要這樣搞 我就得一臺一臺上去操作2次(註釋和取消註釋)。我瘋了纔會這樣做吧! pass了方法二,於是就有了方法三!

對了,強行解釋一波,常理下 該方法是可行的,看我測試機上:

[root@compute1 ~]# ssh 10.233.3.226 echo ccx:ccxplus | chpasswd 
The authenticity of host '10.233.3.226 (10.233.3.226)' can't be established.
ECDSA key fingerprint is SHA256:DBump8wHadJ1tDhz2KUePkCN7xtZmmdkjQ6Ooi7j1j8.
ECDSA key fingerprint is MD5:5a:83:52:87:96:08:3a:34:06:38:eb:53:48:f7:58:ff.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.233.3.226' (ECDSA) to the list of known hosts.
[email protected]'s password: 
[root@compute1 ~]# 
[root@compute1 ~]# ssh [email protected] 
[email protected]'s password: 
Last login: Tue Apr  7 19:05:37 2020
[ccx@compute1 ~]$ logout
Connection to 10.233.3.226 closed.
[root@compute1 ~]#

在這裏插入圖片描述

方式三

方式二中才說 我並不想用expect 來搞,本來不想麻煩的,但我不服輸啊!
所以 真香警告! 搞嘛
注: 期間我 放了一些 理論上可行,但實際不行的實例。 請看到最後,不想了解過程的請直接跳到最後看可行方法。
說下先行條件:你的服務器上得有 expect 命令,沒有的去裝吧,不能yum的,一樣,去我博客shell分類中找安裝方法把,我現在有點煩躁 並不想去打開我的博客去複製鏈接放這。

怕服務器有啥不可抗拒因素誤導我,所以我先用測試機做的實驗!!!!
打開腳本,嘴角帶着一絲邪笑,快速敲下最簡單並且能達到我要求的命令:spwan ssh 10.233.3.226 echo ccx:ccx |chpasswd 當初研究這個沒少被折磨,現在已經搞清楚運行模式,所以現在 熟練的讓人心疼??

[root@control ~]$vi zh.sh
#spawn ssh 10.233.3.226 echo ccx:ccx | chpasswd

expect 執行腳本,沒報錯,完美!
然後登陸,密碼錯誤?我輸錯了? 再來 錯誤? 老密碼,登上了!! ???沒生效??? 咦? 是不是不支持chpasswd

[root@control ~]$expect zh.sh 
spawn ssh 10.233.3.226 echo ccx:ccx | chpasswd
[root@control ~]$
[root@control ~]$
[root@control ~]$ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Last failed login: Tue Apr  7 19:37:34 CST 2020 from controller on ssh:notty
There were 3 failed login attempts since the last successful login.
Last login: Tue Apr  7 19:35:10 2020 from controller
[ccx@compute1 ~]$ 登出
Connection to 10.233.3.226 closed.

既然懷疑是不支持 chpasswd 那就試–stdin吧。這時心裏已經發憷了,不支持chpasswd? 沒理由啊,而且要是不支持chpasswd ,只能用 --stdin, 服務器不支持–stding啊!!涼涼。

[root@control ~]$vi zh.sh
#spawn ssh 10.233.3.226 echo ccx:ccx | chpasswd
spawn ssh 10.233.3.226 echo ccx | passwd --stdin ccx

expect 執行腳本,沒報錯,完美!
然後登陸,密碼錯誤?我輸錯了? 再來 錯誤? 老密碼,登上了!! ???沒生效??? 咦? 是不是不支持 --stdin ???

[root@control ~]$expect zh.sh 
spawn ssh 10.233.3.226 echo ccx | passwd --stdin ccx
[root@control ~]$
[root@control ~]$
[root@control ~]$ssh [email protected]
[email protected]'s password: 
Permission denied, please try again.
[email protected]'s password: 
Last failed login: Tue Apr  7 19:38:24 CST 2020 from controller on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Tue Apr  7 19:37:37 2020 from controller
[ccx@compute1 ~]$ 登出
Connection to 10.233.3.226 closed.

what fuck??????????? 哪個環節出問題了? 明明運行都正常着的啊 爲啥 憑啥 不給我修改密碼,不支持echo模式修改密碼???? 不可能啊!! !憑啥啊! 不可能 我不信 。
那麼就來一套完整的 試試,我就要用echo修改密碼!

[root@control ~]$cat zh.sh 
#spawn ssh 10.233.3.226 echo ccx | passwd --stdin ccx 
#spawn ssh 10.233.3.226 echo ccx:ccx | chpasswd

spawn ssh 10.233.3.226
expect {
        "*assword" { send "root\r";}
        "yes/no" {send "yes\r"exp_continue}
  } 
expect "*]#" {send "echo ccx:ccx|chpasswd\r"}
send "exit\r"
expect eof

執行腳本 並登陸嘗試;
成功了 ?成功了!!!!!!! 切 小小改密碼而已 能難倒如此優秀的崔崇鑫?! 能難倒 崔崇鑫hero???
在這裏插入圖片描述

測試機 沒問題,那麼就去服務器上 測試一臺吧!!! 祈禱:服務器上別給我有啥限制啊。。。。
開玩笑的了 expect 不可能有啥限制,就是這麼自信,開搞;
果然不出所料,一切如預期中 開展進行! 完美! 簡簡單單 有這麼難嗎!
注: 我打碼了所有ip,別意外! 代碼 下面會有說明
在這裏插入圖片描述

既然沒問題了,就開始批量搞把
代碼(部分):

spawn ssh 0.0.0.3
expect {
        "*assword" { send "cloud\r";}
        "yes/no" {send "yes\r"exp_continue}
  } 
expect "*]#" {send "echo jtcjxz:Xz1@#Ty7|chpasswd\r"}
send "exit\r"
expect eof

spawn ssh 0.0.0.4
expect {
        "*assword" { send "cloud\r";}
        "yes/no" {send "yes\r"exp_continue}
  } 
expect "*]#" {send "echo jtcjxz:Xz1@#Ty7|chpasswd\r"}
send "exit\r"
expect eof

spawn ssh 0.0.0.5
expect {
        "*assword" { send "cloud\r";}
        "yes/no" {send "yes\r"exp_continue}
  } 
expect "*]#" {send "echo jtcjxz:Xz1@#Ty7|chpasswd\r"}
send "exit\r"
expect eof

spawn ssh 0.0.0.6
expect {
        "*assword" { send "cloud\r";}
        "yes/no" {send "yes\r"exp_continue}
  } 
expect "*]#" {send "echo jtcjxz:Xz1@#Ty7|chpasswd\r"}
send "exit\r"
expect eof

spawn ssh 0.0.0.7
expect {
        "*assword" { send "cloud\r";}
        "yes/no" {send "yes\r"exp_continue}
  } 
expect "*]#" {send "echo jtcjxz:Xz1@#Ty7|chpasswd\r"}
send "exit\r"
expect eof

執行:expect 腳本名
效果如下,注意,期間不要動,安安靜靜看着就可以了。(懶使人進步)
在這裏插入圖片描述

expect腳本中代碼有不懂的,可以直接去我博客shell分類中查看expect詳解和實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章