我們有一個文本檔案中的服務器和本地用戶串列。我們需要定期更改這些密碼。
cat host.txt
user1@server_test
user2@server_test
usera@server_dev
userb@server_dev
usera1@server_pro
userb1@server_pro
我寫了以下腳本來更改密碼
#!/bin/bash
for i in $(cat host.txt);
do
userid=`echo $i | awk -F"@" '{print $1}'`
server=`echo $i | awk -F"@" '{print $2}'`
ssh $server 'echo -e "tempP@ass\ntempP@ass" | sudo passwd `echo $userid`'
done
此腳本的問題:在遠程服務器上,變數的$userid值不可見(我知道原因)將此值傳遞給遠程服務器的最佳方法是什么?
uj5u.com熱心網友回復:
我不確定你的問題;似乎您應該擔心遠程攻擊者可以看到密碼,但您的問題似乎只是$userid. 我相信你只是想要:
#!/bin/bash
while IFS=@ read userid server; do
ssh "$server" "printf 'tempP@ass\ntempP@ass\n' | sudo passwd $userid"
done < host.txt
如前所述,這是非常不安全的,因為密碼將在遙控器上可見。您可以通過以下方式緩解這種情況:
#!/bin/bash
while IFS=@ read userid server; do
printf 'tempP@ass\ntempP@ass\n' | ssh "$server" "sudo passwd $userid"
done < host.txt
uj5u.com熱心網友回復:
我會用 chpasswd
#!/bin/bash
for i in $(cat host.txt);
do
userid="`echo $i | awk -F"@" '{print $1}'`"
server="`echo $i | awk -F"@" '{print $2}'`"
# ssh root@$server -t "echo $userid:tempP@ass|chpasswd"
# or as suggested by @chepner
echo "$userid:tempP@ass" |ssh root@$server -t chpasswd
done
來自man 8 chpasswd:
chpasswd 命令從標準輸入中讀取用戶名和密碼對串列,并使用此資訊更新一組現有用戶。每行的格式為:
用戶名密碼
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/378356.html
下一篇:如何使用grep匹配精確的單詞
