2015-08-28 4 views
3

Я занимаюсь автоматизацией установки шалфея через загружаемую книгу. В этом мне нужно запустить два сценария оболочки. Вот как первый взгляд сценарий оболочки:Как передать пароль в качестве аргумента для сценария оболочки

#!/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)' 

Это код второй оболочки скрипта:

#!/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 

Теперь, когда я запустите первый скрипт, он запросит новый пароль sage, который может быть чем угодно. Но я не могу передать этот пароль из учебника. Тем не менее, если я

ps -ef | grep sh 

я мог видеть, что сценарии работают, но служба шалфей не работает. Для запуска службы необходим пароль.

Может ли кто-нибудь рассказать мне, как я могу предоставить пароль в качестве аргумента для сценариев оболочки через команду.

+3

Техника, используемая для передачи пароля сценарию оболочки, такая же, как техника, используемая для стрельбы в ногу. Вы избегаете этого. Нет никакого способа сделать это, не вводя отверстия безопасности. –

ответ

2

Я не знаю sage и не знаю, как предоставить пароль альтернативным способом, но если программа запрашивает пароль, чем вы, вероятно, можете использовать expect, как предложено here.

+0

Плей-лист также бросает ошибки и просит запустить . Dpkg --configure -a – apurv

3

Как правило, вы не должны запускать скрипты, требующие ввода пользователем в загружаемые книги.

Вы можете попробовать использовать что-то вроде

echo "password" | script.sh 

или

Создать sage-password файл в /etc содержащий пароль и:

script.sh < /etc/sage-password 

Но это будет работать только тогда, когда он читает из stdin - большинство приложений считывают пароль непосредственно из драйвера терминала (т. е. /dev/ttyS #), в этом случае это три ck не будет работать.

Если это так, взгляните на документы sage, они должны иметь более надежный способ для неинтерактивного запуска.

+0

echo может работать или не работать, в соответствии с реализацией скрипта. например, он не будет работать, если он запустит tty и попросит пароль там. 'ожидать', и его дисперсия должна быть лучше и более гарантированным выбором. – HuStmpHrrr

Смежные вопросы