Удостоверьтесь, что Вы не установили полномочия файла на 'chmod 777', поскольку некоторые руководства сделают, чтобы Вы сделали. Пройдите и посмотрите на что-либо, Ваша учетная запись веб-сервера или группа могут записать в и гарантировать, что они - только области, Вы ожидаете быть динамично обновленными (изображения, вложения, и т.д.).
Как это происходит, .bashrc
и .bash_profile
только выполняются, если Вы находитесь в интерактивной оболочке. Когда Вы входите в систему через ssh, Вы не находитесь в интерактивной оболочке, поэтому Ваше пользовательское PATH
определения никогда не выполняются. Можно связать сценарий к неинтерактивному использованию летних горных пастбищ BASH_ENV
. Проверьте также .ssh/environment
который дает Вам другую альтернативу. Лучший способ знать об этом путем выполнения man ssh
.
Удачи!
Можно попытаться запустить команду через удар с помощью команды-l, таким образом, это действует как оболочка входа в систему
ssh user@server "bash -l -c 'which svnserve'"
Как отмечено в комментариях я уехал выше, необходимо будет выйти из всего $, таким образом, на переменных подробно остановятся сервер и не локально. Например:
ssh user@server "bash -l -c 'echo \$PATH'"
обновление:
Относительно Вас вопрос на том, почему .ssh/environment не вступает в силу, я полагаю, что конфигурация по умолчанию для SSHd состояла бы в том, чтобы проигнорировать пользовательские среды. Необходимо конкретно включить его в/etc/ssh/sshd_config (или подобный) и добавить:
PermitUserEnvironment yes
обновление 2:
Если бы у Вас нет доступа к/etc/ssh/sshd_config, возможное (но не идеальный), решение состояло бы в том, чтобы использовать аутентификацию с открытым ключом для запуска svnserve на входе в систему.
Обратите внимание, что это будет влиять на Вашу способность обычно входить в систему через SSH. Для этого необходимо обойти аутентификацию с открытым ключом:
svn -o PubkeyAuthentication=no user@server
svnserve
через SSH. по некоторым причинам ssh, игнорирует мой .ssh/environemnt файл и любую попытку, которую я пробую
– Eli Bendersky
9 April 2010 в 11:57
Можно выполнить огибающую команду:
ssh servername "env PATH=$REMOTEPATH which svnserve"
which
, это говорит: which: no svnserve in (/usr/bin:/bin)
– Eli Bendersky
9 April 2010 в 12:09
У меня есть та же проблема с HostMonster, из-за недавнего изменения, которое они внесли. Я нашел workraound в старом почтовом потоке по http://svn.haxx.se/dev/archive-2007-02/0204.shtml:
На Вашей рабочей станции:
~/.subversion/config
: найдите [туннелирует], и добавьте строку ssh = ~/svnsshсоздайте ~/svnssh как в ссылке:
#!/bin/sh
/usr/bin/ssh $1 /<ur_bluhost_home_path>/sshsvnserve -t
chmod +x ~/svnssh
На Вашей учетной записи bleuhost:
создать ~/sshsvnserve
, то же содержание как ссылка:
#!/bin/sh
/<ur_bluehost_home_path>/bin/svnserve $*
chmod +x ~/sshsvnserve
Именно. Конфигурация [туннели] изменение изменяет команду, выполненную svn при обработке svn+ssh пространства имен, и используйте ~/svnssh сценарий вместо этого. Сценарий вызывает ssh и передает в полном пути sshsvnserve на Вашей учетной записи bluehost. И sshsvnserve перенаправляет все к полному пути svnserve, поскольку u устанавливают его. Работавший для меня, никакой $PATH не требуется.
Установите переменную BASH_ENV
кому: '~/.bashrc'
.
ssh servername "BASH_ENV='~/.bashrc' which svnserve"
От man bash
:
Когда удар вызывается как интерактивная оболочка входа в систему, или как непредавание земле ‐ активная оболочка с - опция входа в систему, это сначала читает и выполняет com ‐ NAND из файла/etc/profile, если тот файл существует. После чтения того файла это ищет ~/.bash_profile, ~/.bash_login и ~/.profile, в том порядке, и читает и выполняет команды от первой, которая существует и читаема.
и
Когда интерактивная оболочка, которая не является оболочкой входа в систему, запускается, удар читает и выполняет команды от/etc/bash.bashrc и ~/.bashrc, если эти файлы существуют.
и
То, когда удар запускается нев интерактивном режиме, для выполнения сценария оболочки, например, он ищет переменный BASH_ENV в среде, разворачивает ее значение, если это появляется там и использует расширенное значение в качестве названия файла, чтобы читать и выполниться.
От man ssh
:
Кроме того, ssh читает ~/.ssh/environment и добавляет строки формата “VARNAME=value” к среде, если файл существует, и пользователям разрешают изменить их среду. Для получения дополнительной информации посмотрите опцию PermitUserEnvironment в sshd_config (5).
От man sshd_config
:
PermitUserEnvironment
Указывает, обрабатываются ли ~/.ssh/environment и среда = опции в ~/.ssh/authorized_keys sshd (8). Значение по умолчанию является "нет". Включение обработки среды может позволить пользователям обойти ограничения доступа в некоторых конфигурациях с помощью механизмов, таких как LD_PRELOAD.
Мне удалось заставить ssh запускать команды, используя удаленный путь, запустив:
ssh dist@d6 "bash --login -c 'env'"
Это загружает удаленный .profile и т. Д. Здесь env можно заменить любой командой, которую вы когда-либо использовали например.
У меня есть авторизованные ключи, поэтому мне не нужен пароль для запуска команды или ssh.