Как вы можете автоматизировать терминальные команды?

1

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

ssh [email protected]
input my password
sudo su - someuser
input my password
cd /some/working/directory
<run some commands>

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

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

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

ssh [email protected]
<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
  • 1
    Можете ли вы расширить свой вопрос? Какие терминальные команды? Для какой ОС? Что за автоматика? Сценарии использования?
  • 1
    Я определенно попробую что-нибудь с участием милых японских роботов.
Показать ещё 2 комментария
Теги:
macos
ssh

7 ответов

2

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

Вы могли использовать Python здесь, но если вы выполняете серию команд оболочки, вероятно, лучше использовать оболочку script, как именно то, что они делают.

В качестве альтернативы просмотрите Fabric для нужд вашей автоматизации. Это Python-based, а ваши "рецепты" написаны на Python.

  • 0
    Флаг -c используется для: «Выбирает спецификацию шифра для шифрования сеанса». в соответствии с man-страницей ssh ... Вам не нужны никакие флажки или опции, просто используйте ssh myhost "command" ... Смотрите ssh (1) ...
  • 0
    @Carpet, да, я только что понял, что я путаю это с sh -c и тебе вообще не нужен аргумент, отредактировано
Показать ещё 2 комментария
1

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

autoexpect ssh [email protected]

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

  • 0
    это выглядит интересно. я взгляну
1

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

  • 0
    Ткань так же как и Парамико. В настоящее время нет интерактивности.
1

Я не совсем уверен, что вы спрашиваете, но то, о чем вы, вероятно, спрашиваете, - это заставить 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 [email protected] "sh -c 'cd /some/dir; command.sh'"

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

  • 0
    SSH без пароля удалит только часть проблемы. Как вы можете автоматизировать выполнение команд, когда вы находитесь на сервере? Что делать, если вы хотите установить флаги env, затем скопировать в каталог, а затем «осмотреться», то есть: отредактировать файл, перезапустить сервер, снова отредактировать другой файл, перезапустить и т. Д.
  • 0
    Оберните эти команды в сценарий оболочки и выполните этот сценарий через SSH.
0

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

  • 0
    Насколько я знаю, Парамико не хватает интерактивности, которая мне нужна. Обычно он управляет всем выполнением программы.
0

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

0

Вы можете установить содержимое в ~/.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
    Смотрите мой ответ на два выше, которые предлагают то же самое.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню