簡體   English   中英

bash 腳本上的“緩存”憑據

[英]"Cache" credentials on a bash script

我創建了一個 bash 腳本來在 MongoDB 中運行一些 js 腳本。 基本上,我正在做的是,運行 bash 腳本並在這種情況下傳遞一個名為 version 的參數,例如:

./script.sh 1.0

這將執行版本 1.0 的所有腳本。 現在,MongoDB 可能需要身份驗證用戶/密碼,所以我在腳本執行中有一個選項,它會詢問用戶是否需要身份驗證。

read -p "Username: " mongo_user; read -s -p "Password: " mongo_pass;

我的問題是:將相同的憑據緩存多次調用腳本的最佳方法是什么? 例如:

./script.sh 1.0
./script.sh 1.1
./script.sh 1.2 and on.. 

我不想在每次腳本運行時都輸入相同的憑據。

凱歐,

正如我的評論中所述,我是如何做到的:
感謝 Charles Duffy 提供printf解決方案:

#!/bin/bash

ePass() {
        read -sp "Password: " pass
        echo ""
        printf '%s\n' "$pass" | perl -e 'chomp($passwd=<>); chomp($encoded=pack("u",$passwd));print "$encoded\n"' > .pswd
        cat .pswd
}

dPass() {
        dPass=`cat .pswd | perl -e 'chomp($encoded=<>); chomp($passwd=unpack("u",$encoded)); print "$passwd\n"'`
        echo $dPass
}


ePass  
dPass

您可以將這些函數添加到您的腳本中。 當您想設置密碼時,ePass 將執行以下操作:

[KUBO@home ~]$ ./test.sh 
Password: 

它將屏蔽輸入以避免過肩閱讀。 然后它會回顯編碼的輸出(測試后刪除):

Password: Hello >>> %2&5L;&\`

然后你 dPass:

Hello

因此,當您調用 mongo 腳本時,您可以使用 dPass 輸出作為參數。

  • 最好的方法是設置一個環境變量並每次都讀取該變量。
comp@rangeesh:~$ export USERNAME=user
comp@rangeesh:~$ export PASSWORD=pass
comp@rangeesh:~$ echo $USERNAME
user
comp@rangeesh:~$ echo $PASSWORD
pass
comp@rangeesh:~$ 

  • 使用相同的方式,您可以將環境變量用於有效會話或全局變量

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM