Если у меня есть сервер A, на который я могу войти с помощью своего ключа ssh и у меня есть возможность «sudo su - otheruser», я теряю переадресацию ключей, потому что переменные env удаляются, и сокет доступен для чтения только моему первоначальному пользователю. Есть ли способ, которым я могу соединить переадресацию ключей через "sudo su - otheruser", чтобы я мог делать что-то на сервере B с помощью моего перенаправленного ключа (git clone и rsync в моем случае)?
Единственный способ, которым я могу придумать, - это добавить мой ключ к author_keys of otheruser и ssh otheruser @ localhost, но это сложно сделать для каждой комбинации пользователя и сервера, которую я могу иметь.
Короче говоря:
$ sudo -HE ssh user@host
(success)
$ sudo -HE -u otheruser ssh user@host
Permission denied (publickey).
user2
вышеroot
! В противном случаеuser2
SSH_AUTH_SOCK будет настроен правильно, ноuser2
не сможет получить доступ, например, / tmp / ssh-GjglIJ9337 /.root
действительно имеет такой доступ. Таким образом, это может решить часть проблемы, но не ОП: « и сокетDefaults>root env_keep+=SSH_AUTH_SOCK
Следует убедиться, что это только вперед, когда sudoing для root. Вы не хотите делать это в любом случае с другими пользователями по соображениям безопасности. Лучше запустить отдельный ssh-агент для другого, и добавить соответствующие ключи.sudo su -
не работает для меня, по-видимому, это не может сохранить окружающую среду, потому что это неsudo
во время запуска оболочки.sudo su
похоже на работу.sudo su
все равно используют . Если вам нужна корневая оболочка, это то, чтоsudo -s
илиsudo -i
для.Это даст вам корневую оболочку с оригинальными ключами, которые все еще загружены.
источник
Разрешить другим пользователям доступ к
$SSH_AUTH_SOCK
файлу и его каталогу, например, по правильному списку ACL, прежде чем переключаться на них. В примере предполагается ,Defaults:user env_keep += SSH_AUTH_SOCK
в/etc/sudoers
на хост - машине:Более безопасный и работает для пользователей без полномочий root ;-)
источник
otheruser
могут использовать вашу ssh-аутентификациюrwx
и нетrw
(илиr
вообще)?man 7 unix
с Linux для подключения к сокету требуются разрешения на чтение и запись для этого сокета. Также вам нужны права поиска (выполнения) и записи в каталоге, в котором вы создаете сокет, или разрешения поиска (выполнения) только при подключении к этому сокету. Таким образом, в приведенном выше ответе разрешение на выполнение для сокета является избыточным.sudo -u otheruser --preserve-env=HOME -s
Я обнаружил, что это тоже работает.
Как уже отмечали другие, это не сработает, если пользователь, на которого вы переключаетесь, не имеет прав на чтение в $ SSH_AUTH_SOCK (который в значительной степени является любым пользователем, кроме root). Вы можете обойти это, установив $ SSH_AUTH_SOCK и каталог, в котором он находится, чтобы иметь разрешения 777.
Это довольно рискованно, хотя. В основном вы даете каждому другому пользователю в системе разрешение использовать ваш агент SSH (до тех пор, пока вы не выйдете из системы). Вы также можете установить группу и изменить разрешения на 770, что может быть более безопасным. Однако, когда я попытался изменить группу, я получил «Операция не разрешена».
источник
Если вы авторизованы
sudo su - $USER
, тогда у вас, вероятно, будет хороший аргумент для того, чтобы вам разрешалось делатьssh -AY $USER@localhost
вместо него ваш действительный открытый ключ в домашнем каталоге $ USER. Тогда переадресация вашей аутентификации будет проведена с вами.источник
Вы всегда можете просто использовать ssh для локального хоста с переадресацией агента вместо использования sudo:
Недостатком является то, что вам необходимо снова войти в систему, но если вы используете его на вкладке screen / tmux, это всего лишь одноразовое усилие, однако, если вы отключитесь от сервера, сокет (конечно) снова сломается , Так что это не идеально, если вы не можете постоянно держать сеанс screen / tmux открытым (однако вы можете вручную обновить свой
SSH_AUTH_SOCK
env var, если вы круты).Также обратите внимание, что при использовании пересылки ssh root всегда может получить доступ к вашему сокету и использовать вашу аутентификацию ssh (если вы вошли в систему с пересылкой ssh). Поэтому убедитесь, что вы можете доверять root.
источник
otheruser
черезsudo
SSH, а не через SSH (например, вы хотите использовать SCP какwww-data
)Не используйте
sudo su - USER
, а скорееsudo -i -u USER
. Работает для меня!источник
Sudo version 1.6.9p17
работает на Debian Lenny. Попробоватьsudo -s
?sudo -s
ниsudo -i
работы, ни работы ...Объединяя информацию из других ответов, я придумал это:
Мне это нравится, потому что мне не нужно редактировать
sudoers
файл.Проверено на Ubuntu 14.04 (пришлось установить
acl
пакет).источник
Я думаю, что есть проблема с
-
опцией (тире) послеsu
в вашей команде:Если вы прочитаете man-страницу su , вы можете обнаружить, что опция
-, -l, --login
запускает среду оболочки как оболочку входа в систему. Это будет среда дляotheruser
независимо от переменных env, где вы работаетеsu
.Проще говоря, тире подорвет все, что вы прошли от
sudo
.Вместо этого вы должны попробовать эту команду:
Как указал @ joao-costa,
-E
все переменные будут сохранены в среде, в которой вы работалиsudo
. Тогда без черты,su
будет использовать эту среду напрямую.источник
К сожалению, когда вы используете su для другого пользователя (или даже используете sudo), вы потеряете возможность использовать перенаправленные ключи. Это функция безопасности: вы не хотите, чтобы случайные пользователи подключались к вашему ssh-агенту и использовали ваши ключи :)
Метод «ssh -Ay $ {USER} @localhost» немного громоздок (и, как отмечено в моем комментарии к ответу Дэвида, склонному к поломке), но, вероятно, это лучшее, что вы можете сделать.
источник
-a
и-A
аргументы.-a
делает прямо противоположное тому, что задумано, он отключает переадресацию агента! Таким образом, в последней (и, возможно, во всех) версиях Ubuntu используйте-A
для включения переадресации агентов.