一次性同步修改多臺linux伺服器的密碼
我給大家提供一個指令碼,是前一段我剛剛寫的,希望能對大家有所幫助
一 , 需求:linux環境下執行,需要tcl和expect支援
原理說明:利用expect的摸擬互動的功能,登入到指定的多臺伺服器上修改密碼
共2個程式檔案 passall.sh和passone
另外使用者需要自建一個ip地址列表檔案,每行一個ip
二,程式程式碼:
//-----------------------------------程式檔案一---------------------------------------
passall.sh
#!/bin/bash
if [ "$1" = "" ] || [ "$2" = "" ] || [ "$1" = "--help" ] || [ "$1" = "-h" ]
then
echo "usage: passall.sh /path/ip_list.txt /path/passone"
exit
fi
cat $1 | while read line
do
# if ==null
[ -z $line ] && continue
$2 $line;
done
echo -e "/n/npass mod OK!/n"
passone
//-----------------------------------程式檔案二---------------------------------------
#!/usr/bin/expect -f
#-------------------------------------------------- about us
# product: passone
# Author: liuhongdi <
# Last Modified: 2008-05-13
# version: 0.2.2
# user:this script will help you to modify password for many linux(unix) machine
# license: this script is based GNU GPL
#-------------------------------------------------- set the variable,you can modify the value
set loginuser "testuser"
set loginpass {testpass}
set ifsu 1
set su_user "suroot"
set su_pass {surootpass}
set passuser "passusername"
set newpass "passuserpass"
set ipaddr [lrange $argv 0 0]
set timeout 300
set cmd_prompt "]#|~]?"
set ifsshtest 1
#-------------------------------------------------- login by ssh
spawn ssh
set timeout 300
expect {
-re "Are you sure you want to continue connecting (yes/no)?" {
send "yes/r"
} -re "assword:" {
send "$loginpass/r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} timeout {
exit
} eof {
exit
}
}
expect {
-re "assword:" {
send "$loginpass/r"
}
-re $cmd_prompt {
send "/r"
}
}
#---------------------------------------------------- if we need su
expect {
-re $cmd_prompt {
if {$ifsu==1} {
send "su $su_user /r"
expect -re "assword:"
send "$su_pass/r"
} else {
send "/r"
}
}
}
#---------------------------------------------------- now,we modfiy the password
send "passwd $passuser /r";
expect {
"New UNIX password:" {
send "$newpass/r"
}
"passwd: Only root can specify a user name." {
exit
}
}
expect {
"Retype new UNIX password:" {
send "$newpass/r"
}
}
#---------------------------------------------------- now,need do a test?
if {$ifsshtest==1} {
if {$ifsu==1} {
expect -re $cmd_prompt
send "exit/r"
}
expect -re $cmd_prompt
send "exit/r"
spawn ssh
expect {
-re "assword:" {
send "$newpass/r"
} -re "Permission denied, please try again." {
exit
} -re "Connection refused" {
exit
} timeout {
exit
} eof {
exit
}
}
}
expect {
-re $cmd_prompt {
send "/r"
send "/r"
puts "ssh login test OK!"
send "/r"
}
}
#--------------------------------------------------- ok,we exit
expect -re $cmd_prompt
send "/r"
exit
#interact
三,程式說明:
1,passall.sh:bash指令碼,遍歷ip地址的列表檔案,然後分別登入到各臺機器上修改密碼,
接受的引數有兩個: 分別是 ip地址列表的完整路徑,passone的完整路徑
ip地址的列表檔案:放置ip地址的列表,只需要每行一個地址即可
2,passone: expect指令碼,
接受的引數只有一個,就是ip地址
其中可修改的變數的說明:
set loginuser "testuser" //登入到伺服器上的使用者名稱
set loginpass {testpass} //登入到伺服器上的密碼
set ifsu 1 //修改密碼前是否需切換到有許可權的使用者
set su_user "suroot" //su到的使用者名稱
set su_pass {surootpass} //su到的使用者的密碼
set passuser "passusername" //要修改的使用者的使用者名稱
set newpass "passuserpass" //要修改的使用者的新密碼
set ipaddr [lrange $argv 0 0] //接收到的引數,ip地址
set timeout 300 //超時的時間
set cmd_prompt "]#|~]?" //登入到的伺服器的命令提示符,用 | 隔開
set ifsshtest 1 //是否通過再次ssh登入檢測修改密碼是否成功
四:用法舉例:
/home/passuser/passall.sh /home/passuser/mod_ip_list.txt /home/passuser/passone
說明: 命令列中的passall.sh和passone請大家使用上面的程式碼,並做相應修改即可
mod_ip_list.txt是需要使用者自建的ip列表檔案,內容舉例如下:
192.168.1.5
192.168.1.6
192.168.1.7
五:這個要求在執行的機器上安裝有expect和tcl,大家可以用yum或apt等工具進行安裝
相關推薦
一次性同步修改多臺linux伺服器的密碼
如何一次性修改多臺linux伺服器的密碼,這是個問題,我給大家提供一個指令碼,是前一段我剛剛寫的,希望能對大家有所幫助一 , 需求:linux環境下執行,需要tcl和expect支援 原理說明:利用expect的摸擬互動的功能,登入到指定的多臺伺服器上修改密碼 共2
關於解決多臺linux伺服器間的檔案實時同步問題
最近要做一個相關的解決方案,在虛擬機器測試沒有問題。給大家分享出來,有更好的解決方案,歡迎討論。 1.1 inotify相關介紹 1、rsync 與傳統的cp、ta
3,VMware 克隆多臺Linux機器並修改IP等配置
克隆完伺服器後修改配置: 1,修改網絡卡配置 vi /etc/udev/rules.d/70-persistent-net.rules 刪除掉第一個網絡卡配置,將第二個網絡卡名稱修改成eth0 記錄下mac地址修改hw
一臺Linux伺服器部署多個tomcat
此例以配置2個Tomcat為例:1. 下載apache-tomcat-7.0.63,下載下來的檔案為apache-tomcat-7.0.63.zip2. 將檔案上傳至伺服器/usr/local目錄下3. 解壓該壓縮包,並重命名為tomcat1,另一個重新命名為tomcat24
一臺Linux伺服器上同時部署多個Tomcat方法需要注意事項
一、原理講解: tomcat啟動可以通過兩個指令碼分別進行啟動 ./startup.sh 或者 catalina.sh run 形式執行啟動 其實startup.sh的啟動也是呼叫的catalina.sh,然後去啟動的,所以我們需要關注的就是catalina.sh檔案
多臺CentOS伺服器時間同步(NTP時間同步)
同一個程式執行在多臺伺服器上時,有時需要這些伺服器的時鐘相同,但是當伺服器執行一定時間之後,各個伺服器上的時鐘會有一定差異,此時就需要讓所有伺服器自動校準各自時鐘。 NTP是一個很方便的時鐘服務,可以用此來進行時鐘同步。 (以下解決應用於不連線外網的區域網,需求是同步所有伺服
多個Linux伺服器之間實現ssh免密碼連線
假設現在我們有一個使用者,叫tom, 1. 啟動ssh , chkconfig iptables off service iptables stop service sshd start 然後在 tom 使用者下 ,ssh localhost 命令,點yes
在一臺Linux伺服器上安裝多個MySQL例項(一)--使用mysqld_multi方式
(一)MySQL多例項概述例項是程序與記憶體的一個概述,所謂MySQL多例項,就是在伺服器上啟動多個相同的MySQL程序,執行在不同的埠(如3306,3307,3308),通過不同的埠對外提供服務。由於MySQL在一個例項下面可以建立多個數據庫,所以通常在一臺伺服器上只要安裝一個MySQL例項即可滿足使用。但
使用Python之paramiko模塊和threading實現多線程登錄多臺Linux服務器
python ssh paramikothreading 遠程 有時候我們需要在多臺Linux服務器上面執行同樣的命令,或者同樣的操作,如果我們每一臺單獨登錄上去做這樣太麻煩了,所以我們可以考慮使用自動化腳本來實現。我這裏使用Python多線程的方式,這樣速度更快,如果使用Sh
如何同時操作多臺linux服務器
童鞋 技巧 for width ont get RM cap targe 如果你有多臺服務器想要運維,一般可以考慮ansible,puppet之類的,但是如果只是想簡單的在多臺服務器上執行一下命令,用xshell就可以了。 首先要把”撰寫欄”顯示出來,然後在“撰寫欄
記一次多臺linux搭建zookeeper集群
tables hive sam conf accept keep server 查看 地方 自己搭建了zookeeper集群,使用了三臺linux,搭建三節點的集群,這裏記錄一下。 在linux上可以使用wget+網址+版本號,wget和網址之間有個空格,就可以直接在lin
使用python的paramiko模塊對多臺機器更新密碼
str log def ddp -s gin __name__ main function 廢話不多說,直接上代碼 #!/usr/bin/env python# -*- coding: utf-8 -*-from __future__ import print_functi
管理多臺Linux服務器的系統日誌
ima cde client rest 端口號 ets tar images nag 一、 部署服務端 1.給服務器和每個客戶機配IP 給服務器和每個客戶機加一塊網卡,改為橋接 dhclient -d eth1 ip a 2.開啟rsyslog服務的514號端口 vi
VMware 克隆多臺Linux機器並配置IP的方法
1、檢視並分配虛擬網路 我們首先要知道 VMware 三種網路模式的區別。 ①、Bridged(橋接模式):就是將主機網絡卡與虛擬機器虛擬的網絡卡利用虛擬網橋進行通訊。在橋接的作用下,類似於把物理主機虛擬為一個交換機,所有橋接設定的虛擬機器連線到這個交換機的一個介面上,物理主機也同樣插在這個交換機
WMI實現遠端監控多臺windows伺服器
簡介 WMI簡介: WMI(Windows Management Instrumentation,Windows 管理規範)是一項核心的 Windows 管理技術;使用者可以使用 WMI 管理本地和遠端計算機。 WQL簡介: WQL就是WMI中的查詢語言,WQL的全稱是WMI Que
兩臺linux伺服器想共享一個磁碟分割槽
可以使用NFS(網路檔案系統)來實現。 一、NFS服務簡介 NFS 是Network File System的縮寫,即網路檔案系統。一種使用於分散式檔案系統的協定,由Sun公司開發,於1984年向外公佈。功能是通過網路讓不同的機器、不同的作業系統能夠彼此分享個別的資料,讓應用程式在客戶端通過網路
VirtualBox配置多臺Linux實現互相通訊(dhcp自動獲取)
1. 配置VirtualBox 在Virtualbox介面,選擇 管理-> 全域性設定,新增如下圖: 設定Linux網絡卡: 啟動Linux。 2. 配置網絡卡檔案 vim /etc/sysconfig/network-scripts/ifcfg-eth0
多臺Linux機器上配置Jenkins任務
建立資料夾 mkdir jenkins 下載jenkins.war cd jenkins && wget http://mirrors.jenkins.io/war/latest/jenkins.war 用nohup在後臺執行jenkins n
兩臺linux伺服器 掛載同一目錄共享目錄下的所有檔案
比如 登陸本地伺服器192.168.0.96 然後 開啟shell 執行如下命令 /bin/mount -t nfs 192.168.0.95:/opt/usr/huangye/tomcat/webapps/preview/upload /opt/usr/file
scp 將資料從一臺linux伺服器複製到另一臺linux伺服器
scp 是secure copy的簡寫,用於在Linux下進行遠端拷貝檔案的命令,和它類似的命令有cp,不過cp只是在本機進行拷貝不能跨伺服器,而且 scp傳輸是加密的。可能會稍微影響一下速度。當你伺服器硬碟變為只讀 read only system時,用scp可以幫你把檔