дешифрования, что я делаю/что я хочу:ТКАНЬ функции для обновления удаленного сервера
Дистанционно запустить скрипт на наших серверах (с Ubuntu 14.04, Python 2.7.6, Я хотел бы выполнять скрипты на Ubuntu 12.04 Ubuntu & 14,04). Этот скрипт будет монтировать зашифрованные тома и установить правильное имя хоста и подтвердить, что серверы находятся в промежуточной среде.
Что я сделал:
Я создал ОЖИДАТЬ скрипт (скрипты/auto_mounth.sh - Благодаря этому, я могу запустить интерактивный сценарий, что будет автоматически ввести пароль монтирования partion, вызовите имя хоста и введите его и убедитесь, что серверы находятся в промежуточной среде
Я создал функцию ТКАНИ
а. в этой функции я установил 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/')
Я создал Баш скрипт (/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, но проблема все еще существует
Буду очень благодарен за любую помощь