Как вы можете автоматизировать терминальные команды? - PullRequest
1 голос
/ 24 марта 2011

Я устал от этого.

ssh me@somehost.com
input my password
sudo su - someuser
input my password
cd /some/working/directory
<run some commands>

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

Бонусные баллы его запрограммированы в python для дополнительного хакерского совершенства

edit: Все ответы ниже сосредоточены на «полной автоматизации» части вопроса: где трудная часть - это то, что я выделил выше. Вот еще один пример, чтобы увидеть, смогу ли я уловить суть.

ssh me@somehost.com
<get a shell because keys are setup>
sudo su - user_that_deploys_the_app
<input password, because we don't want to give passwordless sudo to developers>
cd env; source bin/activate
cd /path/where/ur/app/is/staging
<edit some files, restart the server, edit some more, check the logs, etc.>
exit the term

Ответы [ 7 ]

2 голосов
/ 24 марта 2011

Для компонента ssh / authentication вы можете установить аутентификацию без пароля с помощью ключей .Тогда вы можете просто использовать ssh и скрипт bash для автоматического выполнения ряда команд.

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

В качестве альтернативы посмотрите Fabric для ваших потребностей автоматизации.Он основан на Python, а ваши "рецепты" написаны на Python.

1 голос
/ 24 марта 2011

Вы можете играть с autoexpect.Создает скрипт expect (язык скриптов, предназначенный для взаимодействия с пользователем).Запустите

autoexpect ssh me@somehost.com

, а затем остальные команды.Скрипт script.exp будет создан.Обратите внимание, что точные результаты ввода и вывода будут записаны скриптом.Если выходные данные могут отличаться от исполнения к выполнению, вам необходимо изменить сгенерированный битовый скрипт.

1 голос
/ 24 марта 2011
Ткань

- прекрасный выбор, как уже отмечали другие.есть также pexpect , который может быть больше, чем вы ищете.

1 голос
/ 24 марта 2011

Я не совсем уверен, что вы спрашиваете, но то, что вы, вероятно, спрашиваете, это заставить SSH работать в режиме без пароля с использованием открытых ключей.Общая идея заключается в том, что вы генерируете пару ключей SSH:

ssh-keygen -t rsa

, которая дает вам id_rsa и id_rsa.pub.Вы добавляете содержимое id_rsa.pub в файл ~/.ssh/authorized_keys целевого пользователя, и с этого момента SSH не будет запрашивать учетные данные.В вашем примере это сработает так:

только один раз

# On your source machine
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
# Copy this to clip board

# On somehost.com
su - someuser
# edit ~/.ssh/authorized_keys and paste what you had copied from previous step

Теперь вы можете просто запустить

ssh someuser@somehost.com "sh -c 'cd /some/dir; command.sh'"

и не запрашивать учетные данные.

0 голосов
/ 25 марта 2011

попробуйте модуль paramiko .Это может удовлетворить ваши требования.

0 голосов
/ 24 марта 2011

Вы можете настроить вещи в вашем ~/.ssh/config Например:

Host somehost
    User test

См. Ssh_config (5) для получения дополнительной информации.

Далее вы можете сгенерировать SSH-ключ, используя ssh-keygen (1), запустить ssh-agent (1) и использовать его для аутентификации.

Если вы хотите запустить команду на удаленном компьютере, вы можете просто использовать что-то вроде:

$ ssh somehost "sh myscript.sh ${myparameter}".

Надеюсь, это, по крайней мере, укажет вам правильное направление:)

Если вам нужен доступ sudo, тогда существуют очевидные потенциальные проблемы безопасности, хотя... Вы можете использовать ChrootDirectory для каждого пользователя внутри блока Match.См. Sshd_config (5) для информации.

0 голосов
/ 24 марта 2011

Как указал Даниэль, вам нужно иметь безопасный способ выполнения ssh и sudo на коробках.Эти предметы универсальны для работы с Linux / Unix.Как только вы решили, что можете использовать ткань .Это инструмент на основе Python для автоматизации.

...