2015-12-16 4 views
2

дешифрования, что я делаю/что я хочу:ТКАНЬ функции для обновления удаленного сервера

Дистанционно запустить скрипт на наших серверах (с Ubuntu 14.04, Python 2.7.6, Я хотел бы выполнять скрипты на Ubuntu 12.04 Ubuntu & 14,04). Этот скрипт будет монтировать зашифрованные тома и установить правильное имя хоста и подтвердить, что серверы находятся в промежуточной среде.

Что я сделал:

  1. Я создал ОЖИДАТЬ скрипт (скрипты/auto_mounth.sh - Благодаря этому, я могу запустить интерактивный сценарий, что будет автоматически ввести пароль монтирования partion, вызовите имя хоста и введите его и убедитесь, что серверы находятся в промежуточной среде

  2. Я создал функцию ТКАНИ

    а. в этой функции я установил env.user & env.password

    b. Эта функция выполняется изменение & обновления операционной системы, а также копировать и запускать ОЖИДАТЬ скрипт (для монтирования шифрованного тома)

    import os 
    import sys 
    import time 
    import boto 
    import deployment 
    import getpass 
    import sys 
    
    env.user = 'my_user' 
    env.password = 'my_sudo_pass" 
    
    def staging_auto_mount(): 
        # install expect 
        sudo('apt-get update', pty=False) 
        sudo('apt-get -y dist-upgrade', pty=False) 
        sudo('apt-get -y autoclean', pty=False) 
        sudo('apt-get -y install expect', pty=False) 
        # auto mount EBS volume 
        sudo('mkdir -p /scripts/', pty=False) 
        put('scripts/auto_mount.sh', '/scripts/', use_sudo=True, mode=0755) 
        run('/scripts/auto_mount.sh') 
        sudo('rm -rf /scripts/') 
    
  3. Я создал Баш скрипт (/home/scripts/staging_server01.sh) - я просто положить в эта команда скрипт для функции запуска Fabric

     cd /scripts/ && /usr/local/bin/fab staging_auto_mount -H XXX.xxx.XXX.xxx 
    

Мой вопрос заключается в следующем:

Когда я запускаю его вручную все работает отлично, и я могу работать только Баш скрипт (объявление 3) как

/home/scripts/staging_server01.sh 

Или я могу запустить функцию Fabric

cd /scripts/ && /usr/local/bin/fab staging_auto_mount -H XXX.xxx.XXX.xxx 

Но, когда я положил его в кронтаб у меня есть проблема

Как установить кронтаб работу, я попробовал несколько вещей

08 07 * * * cd /scripts/ && /usr/local/bin/fab staging_auto_mount -H XXX.xxx.XXX.xxx --password='my_SUDO_PASS' 
08 07 * * * cd /scripts/ && /usr/local/bin/fab staging_auto_mount -H XXX.xxx.XXX.xxx 
08 07 * * * /home/scripts/staging_server01.sh 

(в моей локальной среде я использую тот же пользователь с тем же разрешением sudo, что и на промежуточных серверах. У обоих пользователей такой же PASS для моего тестирования. Я также попытался команды запуска в кронтабе работе как конкретный пользователь)

В журнале я вижу это:

/usr/lib/python2.7/getpass.py:83: GetPassWarning: Can not control echo on the terminal. 
    passwd = fallback_getpass(prompt, stream) 
Warning: Password input may be echoed. 

Я думал использовать SSL и запустить с помощью команды дистанционного управления SSL, но мы часто сервера восстановления, так что я придется очень часто генерировать новые ключи. Так что это не так.

Я провел некоторое расследование, и я переписал свою функцию FABric, и я тоже застрял на этом.и, честно говоря, у меня с кодом ниже намного большая проблема. [Я не могу создать каталог & файла с копией (проблема с разрешением или журнал сказал мне, что каталог уже существует) ни когда я запускал его вручную, либо через crontab]

import os 
import sys 
import time 
import boto 
import deployment 
import getpass 
import sys 
import shutil 
import os.path 

env.user = 'my_user' 
env.password = 'my_sudo_pass' 
path = "/home/scripts/" 

def staging_auto_mount(): 
    # install expect 
    os.system("sudo -p " + "env.password" + " apt-get update") 
    os.system("sudo -p " + "env.password" + " apt-get -y dist-upgrade") 
    os.system("sudo -p " + "env.password" + " apt-get -y autoclean") 
    os.system("sudo -p " + "env.password" + " apt-get -y install expect") 

через кронтаб я могу получить эту ошибку

Message-Id: <[email protected]> 
Date: Tue, 15 Dec 2015 15:29:01 -0600 (CST) 

    sudo: no tty present and no askpass program specified 
    sudo: no tty present and no askpass program specified 
    sudo: no tty present and no askpass program specified 
    sudo: no tty present and no askpass program specified 
    [XXX.xxx.XXX.xxx] Executing task 'staging_auto_mount' 

об ошибке выше я попытался установить конкретное разрешение NOPASSWORD в visudo, но проблема все еще существует

Буду очень благодарен за любую помощь

ответ

0

here вариант -S предлагается:

echo <password> | sudo -S apt-get smth 

sudo -S считывает пароль из стандартного ввода.

here является совет о removimg Defaults requiretty из файла /etc/sudoers