Как я могу использовать `sudo` с командой, но все же« быть собой »?

Мой SysAdmin требует, чтобы я использовал sudo для запуска определенного скрипта. Этот скрипт (в зависимости от того, какая подкоманда вы передаете в качестве аргумента) подключается к другой машине с помощью ssh-ключей, но это не работает, по-видимому, потому, что она запускается как root, а не как я.

Как я могу использовать sudo (который требуется моему системному администратору и которого у меня нет), чтобы получить привилегии для запуска скрипта, и все же сделать команду запущенной с доступом к моим ssh-ключам?

В зависимости от того, как настроено sudo, он может перезаписать большинство переменных окружения. В частности, вполне вероятно, что он перезаписывает SSH_AUTH_SOCK и может перезаписать HOME . Это не то, что вы можете исправить, не изменяя конфигурацию sudo.

Вы можете увидеть конфигурацию sudo (и, в частности, какие переменные среды сохранены), запустив sudo -V как root. Это функция, которую вы не можете видеть в конфигурации как непривилегированный пользователь.

Возможно, ваш системный администратор заблокировал ваши права sudo, чтобы сценарий не мог использовать ваши ssh-ключи. Это может быть политика безопасности, и если она выполнена правильно, то по определению вы не можете ее исправить самостоятельно, вам понадобится ваш sysadmin для изменения конфигурации.

Трудно узнать, что нужно, не зная, что делает скрипт и что такое конфигурация sudo. Возможно, может помочь строка sudoers подобная следующей (она сообщает sudo сохранить SSH_AUTH_SOCK среды SSH_AUTH_SOCK если команда для запуска: /path/to/script ):

 Defaults!/path/to/script env_keep+=SSH_AUTH_SOCK 

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

На ум приходят две вещи. Сначала отредактируйте скрипт так, чтобы только команды, требующие повышенных привилегий, запускались с помощью sudo . Это должно позволить вашему ssh-соединению работать. Это имеет преимущество работы с повышенными привилегиями только тех команд, которые в ней нуждаются. Выполните команду без sudo в командной строке, полагаясь на то, что вызовы sudo в скрипте будут делать правильно.

Во-вторых, отредактируйте скрипт так, чтобы он явно задавал имя пользователя для подключения. Вы можете использовать переменную $SUDO_USER , которая содержит имя пользователя, которое запустило текущий сеанс sudo . Это должно сделать трюк:

 ssh "${SUDO_USER}@remotehost.example.com" 

Идентификатор пользователя всегда будет изменяться с помощью sudo, но вы можете сохранить свою среду с параметром -E.