Я устал от этого.
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
Для части ssh/authentication вы можете установить аутентификацию без пароля с помощью клавиш. Затем вы можете просто использовать ssh
и bash script для автоматического выполнения серии команд.
Вы могли использовать Python здесь, но если вы выполняете серию команд оболочки, вероятно, лучше использовать оболочку script, как именно то, что они делают.
В качестве альтернативы просмотрите Fabric для нужд вашей автоматизации. Это Python-based, а ваши "рецепты" написаны на Python.
-c
используется для: «Выбирает спецификацию шифра для шифрования сеанса». в соответствии с man-страницей ssh ... Вам не нужны никакие флажки или опции, просто используйте ssh myhost "command"
... Смотрите ssh (1) ...
sh -c
и тебе вообще не нужен аргумент, отредактировано
Вы можете играть с autoexpect
. Он создает язык expect
script (script, предназначенный для взаимодействия с пользователем). Run
autoexpect ssh [email protected]
за которым следуют остальные команды. script script.exp
.
Обратите внимание, что точные результаты ввода и вывода будут записаны с помощью script. Если вывод может отличаться от исполнения к исполнению, вам необходимо изменить созданный бит script.
ткань - прекрасный выбор, как указывали другие. есть также pexpect, который может быть больше того, что вы ищете.
Я не совсем уверен, что вы спрашиваете, но то, о чем вы, вероятно, спрашиваете, - это заставить 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'"
и не запрашивать учетные данные.
попробуйте модуль paramiko. Это может удовлетворить ваши требования.
Как сказал Дэниел, вам нужно иметь безопасный способ делать ssh и sudo на коробках. Эти элементы универсальны для работы с ящиками linux/unix. Как только вы решите, что вы можете использовать ткань. Это инструмент на основе python для автоматизации.
Вы можете установить содержимое в ~/.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) для информации.