Мне интересно, есть ли способ выполнить скрипт / команды с локальной машины без внесения каких-либо изменений от имени пользователя root на удаленной машине?
Некоторый фон
Я пытаюсь настроить некоторые задачи через Capistrano, и мне требуется sudo
доступ. Существует около 30+ серверов, и для меня обновление вручную /etc/sudoers
будет болезненным, поэтому мне было интересно, есть ли способ обновить этот файл удаленно?
fabric.contrib.files.sed
метод.Ответы:
Вы можете запускать локальные сценарии удаленно, выполняя
bash
в удаленной системе и передавая им свой сценарий$ ssh user@host 'bash -s' < script.sh
редактировать
Для выполнения команд, требующих использования
sudo
на удаленной машине, используйтеssh's
-t
опцию и передайте командыssh
.-t
Вариант выделяет псевдо TTY и позволяет взаимодействие пользователя с команды пробежалssh
, например , при вводе пароляsudo
Для изменения файла с помощью этого метода
sed
рекомендуется использовать перенаправление,>
поскольку перенаправление оболочки не позволяет записывать файлы при использованииsudo
. Кроме того, все переменные вsed
команде должны быть экранированы при их передачеssh
.Чтобы автоматизировать все это:
источник
/etc/sudoers
файл из-за прав доступа root, он не удастся.sudo
пароль, который, как я понимаю, установлен в/etc/sudoers
sudo
прав на этих компьютерах, то для изменения/etc/sudoers
вам нужно будет войти через ssh asroot
. Таким образом, команда будетssh root@host -t 'sed -i "\$a text to insert" /path/to/file'
Я обнаружил, что
tee
команда помогает избежать ограничения sudo при перенаправлении файлов. Использование sed оказалось разочаровывающим из-за требований побега персонажа.Это команда, которую я использовал для удаленного добавления хостов для всех машин в моем кластере в / etc / hosts:
Выходные данные для каждой итерации выглядят так:
Этот ответ SU сыграл ключевую роль в построении моего окончательного решения: https://superuser.com/a/1026359/587485
источник
Если вам нужно выполнить несколько команд или перенаправлений, вы должны использовать следующий синтаксис:
источник
Для того чтобы изменить файл sudoers, вам, возможно, придется уже иметь какой-то доступ к корневому уровню, либо через прямой пароль root, либо через настройку правила sudo вашего идентификатора пользователя.
источник