2015-08-28 200 views
3

我正在通過ansible-playbook自動安裝聖人。因爲我需要運行兩個shell腳本。 下面是第一個shell腳本的樣子:如何將密碼作爲參數傳遞給shell腳本

#!/bin/bash 
# Creating Sage notebook 

dir="/root/.sage/sage_notebook.sagenb" 
screen -S "Sage_Server" sage -c 'notebook(interface="", directory=$dir, port=80, accounts=true)' 

這是第二個shell腳本代碼:

#!/bin/bash 
# Creating Sage inotebook 

address=$(hostname --ip-address) 
sage -c "inotebook(interface=" "'$address'" ",port=80,accounts=true)" 

這是劇本的樣子:

--- 
- hosts: localhost 
    remote_user: root 

    tasks: 
    - name : update system 
    apt : update_cache=yes  

    - name : install m4 
    apt : name=m4 state=present 

    - name : install build-essential 
    apt : name=build-essential state=present 

    - name : install gcc 
    apt : name=gcc state=present 

    - name : install gfortran 
    apt : name=gfortran state=present 

    - name : install libssl-dev 
    apt : name=libssl-dev state=present 

    - name : install python-software-properties 
    apt : name=python-software-properties state=present 

    - name : add sage ppa repo 
    apt_repository: repo='ppa:aims/sagemath' 

    - name : update system 
    apt : update_cache=yes 

    - name : install dvipng 
    apt : name=dvipng state=present 

    - name : install sage binary 
    apt : name=sagemath-upstream-binary state=present 

    - name : invoke create_sagenb script 
    command: /usr/bin/screen -d -m sudo /root/databases-and-datamining-iiith/python-scripts/create_sagenb -i -y 

    - name : invoke start_sage script 
    command: /usr/bin/screen -d -m sudo /root/databases-and-datamining-iiith/python-scripts/start_sage -i -y 

現在,當我運行第一個腳本,它會要求一個新的可能是任何東西的聖人密碼。但是我無法從劇本中傳遞密碼。 不過,如果我做

ps -ef | grep sh 

我可以看到腳本運行,但聖人服務沒有運行。 它需要密碼才能啓動服務。

任何人都可以請告訴我如何通過命令將密碼作爲參數提供給shell腳本。

+3

用於將密碼傳遞給shell腳本的技術與用於在腳中拍攝自己的技巧相同。你避免它。沒有引入安全漏洞就沒有辦法做到這一點。 –

回答

2

我不知道sage,不知道如何以另一種方式提供一個密碼,但如果程序要求輸入密碼比你也許可以使用expect的建議here

+0

該劇本也拋出錯誤,並要求運行 根據腳本的實施,dpkg --configure -a – apurv

3

作爲一條經驗法則,您不應該在完整的劇本中運行需要用戶輸入的腳本。

你可以嘗試使用類似

echo "password" | script.sh 

創建sage-password文件/etc包含密碼和:

script.sh < /etc/sage-password 

但是,這如果是讀只會工作從標準輸入 - 大多數應用程序直接從終端設備驅動程序(即/dev/ttyS#)讀取密碼,在這種情況下,這三CK不會工作。

如果是這樣,請看看sage文檔,他們應該有一個非交互式啓動更健壯的方式。

+0

回聲可能會或可能不起作用。例如,如果它啓動一個tty並在那裏要求密碼,它將不起作用。 「預期」及其差異應該是更好,更有保證的選擇。 – HuStmpHrrr

相關問題