У меня есть пользователь, который не вносил никаких изменений в $ PATH в любых точечных файлах: это точно настройка системы по умолчанию. Из оболочки входа в систему:
$ ssh example.com
user@example.com:~$ cat /tmp/hello.hs
#!/bin/bash
echo "$SHELL"
echo "$PATH"
user@example.com:~$ /tmp/hello.hs
/bin/bash
/usr/local/bin:/usr/bin:/bin
Точно так же, как указано в /etc/profile
. Это я нахожу довольно неожиданным:
$ ssh example.com '/tmp/hello.sh'
/bin/bash
/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games
Как я уже сказал, в $ PATH нет ни изменений ~/.bashrc
, ни изменений /etc/bash.bashrc
. Нет ~/.ssh/environment
тоже. ssh(1)
Заявляет , что переменная среды PATH
является
Установите значение PATH по умолчанию, как указано при компиляции ssh.
но этот поток из StackOverflow и статья в списке рассылки предполагают, что я должен иметь возможность влиять на $ PATH для данной команды, просто изменив / etc / profile, один из файлов запуска оболочки и т. д.
Что тут происходит?
.bashrc
тоже может сработать, но в целом я бы обошел это, если важен PATH. Или почему бы просто не указать полные пути, если вам нужен командный способ запуска ssh? :)bash(1)
ВЫЗОВ предполагает , что никакие загрузочные файлы не читаются таким образом, но я не могу найти документацию по каким SSH является вызовом оболочки. Кажется, это противоречит приведенным выше ссылкам, если только у других нет источника загрузки файла / etc / ssh / sshrc, которого у меня нет. (Конечно, есть обходные пути, но суть в том, чтобы точно понять, как Debian SSHD обрабатывает пути по умолчанию.)/etc/profile
своих обновлениях пути удаленного ящика для меня, тоssh user@remotebox 'env'
показывает мне обновленный PATH. То же самое происходит, если я добавляюexport PATH=$PATH:/my/testpath
в .bashrc (но в моем случае вверху файла перед проверкой на наличие интерактивных оболочек (-z "$PS1"
).Я смог заставить ssh запускать команды, используя удаленный путь, выполнив:
Здесь env можно заменить любой командой, которая вам нужна.
У меня есть авторизованные ключи, поэтому мне не нужен пароль для запуска команды или ssh.
источник
Я придумал другое решение, чтобы решить проблему. Мое личное предпочтение - создавать новые файлы конфигурации, а не изменять существующие. Таким образом, я могу легче исключить изменения из конфигурации по умолчанию.
Вот содержание
/etc/profile.d/ssh_login.sh
:Использование
dropbear
вместоopenssh-server
(это также должно работать с openssh), переменная SSH_CONNECTION автоматически устанавливается, когда я вхожу удаленно. Я создал новую конфигурацию профиля оболочки для обнаружения входов SSH, отображения некоторой информации на экране и, что наиболее важно, загрузки глобальных параметров среды/etc/environment
для замены скомпилированных значений. Обратите внимание, что это влияет только на интерактивные оболочки SSH, а не на удаленное выполнение команд.В качестве альтернативы , если вы используете openssh и всегда хотите загрузить глобальную среду, независимо от того, является ли она интерактивной оболочкой, вы можете поместить символическую ссылку
~/.ssh/
следующим образом:Затем вам нужно включить
PermitUserEnvironment
опцию в/etc/sshd/sshd_config
. Делайте это только для доверенных пользователей, поскольку это может позволить им обойти ограничения доступа в некоторых конфигурациях, используя такие механизмы, как LD_PRELOAD. Пожалуйста, смотритеman sshd_config
для получения дополнительной информации, в частности, как использоватьMatch
блоки для ограничения параметров для конкретных пользователей / групп.источник
Если вы хотите загрузить путь к профилю, попробуйте:
в верхней части сценария. Таким образом, оболочка находится в интерактивном режиме при запуске скрипта.
http://linux.die.net/man/1/bash
источник