답변:
이를 달성하는 두 가지 방법이 있습니다.
cd /var/www/websites
끝에 추가 하십시오 .bashrc
. 나는 항상 내 홈 디렉토리 대신 / etc / puppet / environments / dkaarsemaker에 있기를 원하므로 puppetmasters에서 이것을 사용합니다 :-).profile
대신에 넣고 싶을 수도 .bashrc
있지만 사용 사례에 따라 다릅니다. .profile
대화 형 로그인 (예 : 셸)에 대해서만 실행되지만 .bashrc
비 대화식 로그인 (예 : scp, rsync 등)에 대해서도 실행됩니다. 또한 .profile은 bash가 아닌 쉘 (예 : zsh)에 의해 호출 될 가능성이 높습니다.
당신은 SSH 로그인에 키를 사용하는 경우에 당신은 앞에 붙이는 경로를 변경할 수 command=
의 핵심 전에에 ~/.ssh/authorized_keys
온 원격 서버. 예:
command="cd /var/www/websites ; /bin/bash -l" ssh-rsa AAA.....rest of the key
동일한 사용자에 대해 여러 키를 생성하고 사용하는 것이 좋습니다. 서버의 한 키에는 다른 키에는없는 명령이 포함될 수 있습니다. 이렇게하면 로그인시 예상 동작을 선택할 수 있습니다. 로컬로 간단히 마무리 할 수 있습니다 ~/.ssh/config
.
Host websites-my-host
HostName <realhostname>
IdentityFile ~/.ssh/<key1> #on the server key with "command"
User webmaster
Host my-host
HostName <realhostname>
IdentityFile ~/.ssh/<key2> #on the server key without command
User webmaster
이것이 일어날 것입니다 :
local$ ssh websites-my-host
webmaster@realhostname:/var/www/websites$ _
또는:
local$ ssh my-host
webmaster@realhostname:~$ _
$SSH_ORIGINAL_COMMAND
대신 /bin/bash -l
(내 경우에는 hg) 대신 사용할 수 있습니다 . 또는 $SHELL
bash로 하드 코딩하지 않으려는 경우. 도구와 사람의 로그인을 두 가지 모두로 얻는 방법을 잘 모릅니다.
Openssh sshd는 기본적으로 클라이언트에서 다음 환경 변수를 허용합니다.
AcceptEnv LANG LC_*
이를 사용하여 다음과 같이 클라이언트의 로컬 환경에서 서버로 값을 보낼 수 있습니다.
LC_CDPATH=/var/www/websites ssh -o SendEnv=LC_CDPATH user@server
SendEnv 지시문을 ~ / .ssh / config에 배치하여 명령 줄에 포함시키지 않아도됩니다.
~ / .profile에 다음을 배치하면 (대화식 로그인에만 영향을 주려면 .profile을 사용하고, 모든 로그인에 영향을 주려면 .bashrc를 사용하십시오) :
if [ "$LC_CDPATH" -a -d "$LC_CDPATH" ]; then
cd "$LC_CDPATH";
fi
그런 다음 로그인 할 때 디렉토리가 지정된 경우 디렉토리 인 경우 환경 변수에 지정된 디렉토리로 자동 변경됩니다.
LC_*
트릭