Я провожу большую часть своего дня ssh'd в серверы. У меня есть серия псевдонимов/функций/сценариев, которые позволяют мне вводить p hostname
от терминала и выполняют экран (1) GNU на удаленной стороне, с помощью следующей команды:
exec ssh hostname -t 'screen -RD'`
Я только недавно заметил это ssh -t
не получает мое пользовательское $PATH
. Вот некоторый терминальный вывод:
adam@workstation:~:0$ sh server 'echo $PATH'
/home/adam/bin:/usr/local/bin:/bin:/usr/bin:/opt/git/bin:/opt/git/libexec/git-core
adam@workstation:~:0$ ssh server -t 'echo $PATH'
/usr/local/bin:/bin:/usr/bin
Connection to uranus.plymouth.edu closed.
Моей самой большой проблемой являются мои пользовательские псевдонимы, только пытаются выполниться screen
, так как я не могу гарантировать полный путь и мой $PATH
структурирован так, оболочка должна найти корректный. Если мой $PATH
настройки не соблюдают, мои сценарии не работают. Есть ли способ, которым я могу использовать $PATH
как определено моим .bashrc
/.bash_profile
?
Я верю PermitUserEnvironment
отключен.
Если можно изменить команду использование псевдонимов, у Вас может быть удаленная сторона, создают “интерактивный”, экземпляр “входа в систему” удара (т.е. тот, который использует Ваш .bashrc
и .bash_profile
) выполнять экран:
ssh server -t 'exec bash -ilc "exec screen -RD"'
Если кроме того, Вы не получаете свою нормальную среду (ПУТЬ, окружите настройки, и т.д.) в оболочках, созданных в экране, Вы, возможно, должны были бы сказать экрану создавать оболочки “входа в систему”. Поместить shell -bash
в Вашем .screenrc
на удаленных концах, или добавляют -s -bash
к Вашему экранному вызову:
ssh server -t 'exec bash -ilc "exec screen -RDs -bash"'
Это, конечно, выполнит Ваш .bash_profile
дважды (однажды экран, однажды для каждой оболочки, созданной в экране). В зависимости от того, как Вы делаете свои манипуляции ПУТЕМ, это может привести к нескольким копиям тех же дополнений к Вашему ПУТИ (это обычно - не проблема).
Ваш пользовательский $PATH, вероятно, установлен в .bashrc, который выходит при выполнении под pseudo-tty средой ssh -t ...
.
У меня нет прямого опыта с этим, но я держал пари, осматриваете ли Вы .bashrc, Вы будете видеть, что он выходит, если $PS1 не установлен, или [-t 1] сбои или что-то как этот, прежде, чем установить $PATH. И если Вы будете экспериментировать, то Вы, вероятно, найдете это ssh server 'try_that_test'
и ssh server -t 'try_that_test'
дайте различные результаты.
Вероятно, можно зафиксировать его путем создания теста более сложным, чтобы проверить, работаете ли Вы под ssh.
.bashrc
и .bash_profile
только обрабатываются для интерактивных оболочек, который любая оболочка, которая выполняет программу такой как screen
(или echo
в тестовых сценариях), не. Читайте в странице справочника удара о BASH_ENV
переменная среды, которая может быть настроена для выполнения скрипта запуска для неинтерактивных оболочек.
Можно хотеть использовать ~/.ssh/rc
или ~/.ssh/environment
также. Посмотрите sshd(8)
страница справочника.