내가 정말로 해결하고 싶었던 문제를 반영하도록 편집했습니다.
Capistrano를 통해 배포 할 수 있도록 루비 환경을 설정해야합니다.
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
~ deploy / .profile에 넣었지만 ssh를 입력하면 실행되지 않습니다. 아이디어?
우분투 12.04를 실행 중입니다.
원래 질문은 다음과 같습니다.
localhost의 다른 계정으로 ssh하면 .profile 이로 드되지 않습니다. ssh가 강제로로드하는 방법은 무엇입니까? 우분투 12.04를 실행 중입니다.
답변
대화식 로그인 쉘을 시작하도록 명시 적으로 지정할 수 있습니다.
ssh user@host bash --login -i
(또는 ~. / bash_profile) 및 ssh 의 “역할” 에는 다른 파일이 있습니다 ( 자세한 내용 참조).~/.profile
.bashrc
man ssh
~ / .ssh / 환경
환경 변수에 대한 추가 정의를 포함합니다. 위의 환경을 참조하십시오.
~ / .ssh / rc
이 파일의 명령은 사용자의 쉘 (또는 명령)이 시작되기 직전에 사용자가 로그인 할 때 ssh에 의해 실행됩니다. 자세한 내용은 sshd (8) 매뉴얼 페이지를 참조하십시오.
답변
.profile
ssh 세션이 아닌 기본적으로 로그인 쉘에 대해서만로드됩니다. 모든 대화식 쉘에 대해 시작시 무언가를 실행하려면 .bashrc
대신 (또는 .zshrc
쉘이 사용하는 것) 넣습니다 .
또한 로컬 컴퓨터에서 다른 계정으로 로그인하려는 경우 ssh가 너무 과도 할 수 있습니다. su
대신에 무언가 를 사용하고 싶을 수도 있습니다 .
답변
bash를 사용하면 다음과 같이 읽습니다 ~/.bashrc
. 다음은 ksh 및 sh (sh 모드의 bash) 또는 ~/.bashrc
로그인 중에 실행되지 않은 경우에 도움이 될 수 있습니다 .
SSHD 문의 할 ~/.ssh/environment
(권한이 있는지 확인하기 위해 sshd_config에 (5)) 및 ~/.ssh/sshrc
나 ~/.ssh/rc
. 이 설정에 가능성을 제공 ENV=~/.profile
하거나 BASH_ENV=~/.profile
및SSH_LOGIN=Y
에서 ~/.profile
나는 다음과 같은 레이아웃을했습니다 (교체 ENV
로 BASH_ENV
떠들썩한 파티를 사용하는 경우) :
if [[ -n $SSH_LOGIN || -z $ENV ]]; then
# Put here login initialization code
unset SSH_LOGIN
ENV=~/.profile
fi
# Put here code thats get executed with each ksh/sh invocation
답변
Bash ~/.profile
는 로그인 쉘인 ~/.bash.bashrc
경우에만 그리고 터미널이있는 경우 에만 읽습니다. 기본적으로 ssh를 사용하여 명령을 호출 할 때는 둘 중 하나도 아닙니다. 그러나 불행히도 시스템 설정에 따라 서버에서 환경을 설정하는 몇 가지 다른 옵션이 있습니다.
~/.zshenv
이 경우에도 Zsh는 읽습니다 . bash에 해당하는 구성 파일이 없습니다.- 에
PermitUserEnvironment
옵션이 설정되어 있으면/etc/sshd_config
ssh가 읽습니다~/.ssh/environment
. 불행히도이 옵션은 기본적으로 해제되어 있습니다. - 이 경우
pam_env.so
로 호출user_readenv=1
에/etc/pam.d/sshd
, 그것을 읽을 것이다~/.pam_environment
. 모듈의 기본값은 아니지만 적어도 우분투에서는 그렇게 호출 됩니다. - 다른 모든 방법이 실패하면
command=
환경을 설정$SSH_ORIGINAL_COMMAND
하고 끝에 실행하는 래퍼 스크립트를 호출하는 권한이 부여 된 키 파일에 지시문을 넣을 수 있습니다 (명령은 쉘에 대한 명령이므로 여기서 eval이 적합하지만 확실하지 않습니다) .
답변
당신은 아마이 ~/.bash_profile
, 어떤 무시 ~/.profile
.