서버에 SSH 연결할 때 기본 디렉토리 변경


42

우분투 서버에 SSH를 넣은 후에 넣을 기본 디렉토리를 변경하는 방법이 있는지 궁금합니다.

서버에 로그인 할 때 시간의 99 %가 특정 디렉토리 내의 파일에 액세스하는 것입니다.

/var/www/websites

로그인 할 때이 디렉토리에 바로 넣을 수 있도록 구성 파일을 편집 할 수 있습니까?

답변:


61

이를 달성하는 두 가지 방법이 있습니다.

  • 서버의 홈 디렉토리를 / var / www / websites로 변경하십시오 (실제로는 좋지 않습니다)
  • cd /var/www/websites끝에 추가 하십시오 .bashrc. 나는 항상 내 홈 디렉토리 대신 / etc / puppet / environments / dkaarsemaker에 있기를 원하므로 puppetmasters에서 이것을 사용합니다 :-)

감사. / etc 디렉토리에있는 bash.bashrc 파일을 편집했습니다. 치료를했다 :)
밥 플레밍

7
모든 사용자에게 영향을 미치기 때문에 그렇게하지 않겠습니다. /home/yourlogin/.bashrc 편집
Dennis Kaarsemaker

6
이것을 .profile대신에 넣고 싶을 수도 .bashrc있지만 사용 사례에 따라 다릅니다. .profile대화 형 로그인 (예 : 셸)에 대해서만 실행되지만 .bashrc비 대화식 로그인 (예 : scp, rsync 등)에 대해서도 실행됩니다. 또한 .profile은 bash가 아닌 쉘 (예 : zsh)에 의해 호출 될 가능성이 높습니다.
phord

.bashrc는 "exec bash"를 실행하여 bash를 새로 고칠 때 실행됩니다. 특수 사용 사례 (여기서는 ssh 로그인)에 대한 bashrc 변경은 유용하지 않습니다.
user3123159

14

당신은 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:~$ _

3
나는이 질문을 허용 된 것보다 선호합니다. 이를 통해 여러 사용자가 서버에서 동일한 사용자를 사용할 수 있으며 개인 로그인시 발생하는 상황을 계속 사용자 정의 할 수 있습니다. 다른 사용자보다 훨씬 유연하고 정확합니다.
testuser

1
~ / .ssh / authorized_keys에 명령을 추가하면 rsync, scp와 같은 ssh를 기반으로하는 다른 도구에 영향을 미치므로 여기서주의해야합니다. 이 명령은 단순히 중단됩니다
warunapww

1
도구를 사용하는 $SSH_ORIGINAL_COMMAND대신 /bin/bash -l(내 경우에는 hg) 대신 사용할 수 있습니다 . 또는 $SHELLbash로 하드 코딩하지 않으려는 경우. 도구와 사람의 로그인을 두 가지 모두로 얻는 방법을 잘 모릅니다.
mpen

주의 사항 : PasswordAuthentication을 비활성화하고 ( askubuntu.com/questions/346857/… 참조 ) 실수로 명령 문자열을 잘못 입력하면 시스템에서 벗어날 수 있습니다.
karan.dodia

6

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

그런 다음 로그인 할 때 디렉토리가 지정된 경우 디렉토리 인 경우 환경 변수에 지정된 디렉토리로 자동 변경됩니다.


1
+1 LC_*트릭
동양
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.