내가 얻으려고 ssh
. 내가 로그인 할 때 자동으로 특정 디렉토리로 변경 난에 다음과 같은 지침을 사용하여 작업하는 동작을 얻기 위해 노력했다 ~/.ssh/config
:
Host example.net
LocalCommand "cd web"
하지만 로그인 할 때마다 다음이 표시됩니다.
/bin/bash: cd web: No such file or directory
비록 web
내 홈 디렉토리 에는 확실히 폴더 가 있지만 . 절대 경로를 사용하더라도 동일한 메시지가 나타납니다. 분명히 cd web
로그인 한 후 입력 하면 올바른 폴더로 이동합니다.
내가 여기서 무엇을 놓치고 있습니까?
편집하다:
따옴표 / 절대 경로의 다른 조합은 다른 오류 메시지를 제공합니다.
LocalCommand "cd web"
/bin/bash: cd web: No such file or directory
LocalCommand cd web
/bin/bash: line 0: cd: web: No such file or directory
LocalCommand cd /home/gareth/web
/bin/bash: line 0: cd: /home/gareth/web: Input/output error
이것은 따옴표가 없어야하며 다른 오류가 발생한다고 생각합니다.
답변
cd는 내장 쉘입니다. LocalCommand는 다음과 같이 실행됩니다.
/bin/sh -c <localcommand>
당신이 찾고있는 것은 실제로 SSH를 통해 달성 할 수 없습니다. bashrc / bash_profile과 같은 방식으로 쉘을 수정해야합니다.
<거의 10 년 후 편집 …>
LocalCommand
어쨌든 당신이 원하는 것이 아닙니다. 그것은 당신의 컴퓨터 에서 실행됩니다 . 당신은 원합니다 RemoteCommand
. 이와 같은 것이 나를 위해 일했습니다 :
Host example.net
RemoteCommand cd / && exec bash --login
RequestTTY yes
답변
이것은 작동합니다 :
ssh server -t "cd /my/remote/directory; bash --login"
디렉토리가없는 경우 작성하려면 다음을 수행하십시오.
ssh server -t "mkdir -p newfolder; cd ~/newfolder; pwd; bash --login"
bash
경로 끝에 추가하지 않으면 cd
comand가 실행 된 후 종료 됩니다. 추가하지 않는 경우 그리고 --login
다음이 ~/.profile
공급되지 않습니다.
답변
- 박스에 로그인
- 편집하다
~/.bash_profile
- 파일의 끝에 추가
cd /path/to/your/destination
- 저장 후 종료
- 상자에서 로그 아웃
- 다시 로그인하면 착륙해야합니다
/path/to/your/destination
답변
기본 .bashrc 파일을 ssh하고 재정의해야 할 경우 더 강력한 솔루션입니다. 원격 서버 환경에 여러 개의 docroot가 있고 여러 사용자가 사용하는 경우에 유용합니다.
alias ssh_myserver='ssh server_name -t "echo cd /path/to/desired/dir>/tmp/.bashrc_tmp; bash --rcfile /tmp/.bashrc_tmp"'
좀 더 상세한:
- 첫 번째 명령은 컨텐츠를 사용하여 원격 서버의 디렉토리에
.bashrc_tmp
파일을 작성 합니다./tmp
cd /path/to/dir
- 다음 명령은
bash
1 단계에서 지정한 구성 파일을 사용하여 실행 됩니다. 그러면 원하는 dir로 전환하고 default를 억제 할 수 있습니다.bashrc
. - 이 전체 명령은로 래핑
alias
되므로 ssh 클라이언트 명령 프롬프트에서 다음과 같이 호출 할 수 있습니다ssh_myserver
답변
ssh 설정에서이 지시문을 활성화 했습니까?
PermitLocalCommand yes
기본값은입니다.이 no
경우 LocalCommand
지시문이 무시됩니다.
또는 .bashrc
파일에 명령을 추가해 보셨습니까 ?
답변
그래서 많은 웹 사이트 (스택 오버 플로우,이 웹 사이트)를 검색했지만 원하는 것을 찾지 못했습니다. 나는 내 자신의 쉘 스크립트를 만들었습니다. 여기에 붙여 넣습니다. 또한 $ PATH에 디렉토리를 복사 할 수 있습니다.
#!/bin/bash
ssh -t <username@hostname> "cd ~/$1; exec \$SHELL --login"
그래서이 후. 나는한다:
connect <foldername>
참고 : 경로 변수를 변경 한 후 로그 아웃했다가 다시 로그인해야 할 수 있습니다
답변
당신의 ~/.ssh/config
:
LocalCommand echo '/home/%r/some/subdir' > /home/%r/.ssh/ssh_cd
당신의 끝에 ~/.bashrc
:
if [[ -f $HOME/.ssh/ssh_cd ]]
then
cd $(<$HOME/.ssh/ssh_cd)
# uncomment the line below and the file will be removed so the cd won't work
# unless the file is regenerated since you may not want this to operate for
# non-ssh logins or for ssh logins that you want to function differently
# rm $HOME/.ssh/ssh_cd
fi
내 보낸 변수를 포함하여 변수 전달을 사용 하여이 작업을 시도했지만 이러한 명령은 다른 쉘에서 실행됩니다.
당신이하려는 것을 테스트 할 때 인용되지 않은 절대 경로를 사용할 때 오류가 발생하지 않았습니다. ; pwd
명령 끝에 추가 했는데 올바른 디렉토리가 표시되지만 결국 디렉토리는 ~
입니다. cd
쉘 시작 파일 에는 명령 이 없습니다 . 나는 다른 퍼팅 시도 cd somedir; pwd
에 ~/.ssh/rc
(아직도 그 자리에 다른과). config
MOTD가 발급되기 전에 명령을 실행하고 rc
명령 이후에 발행하지만, 쉘 전에 시작 파일이 공급됩니다. 다시 말하지만, 그것은 다른 껍질에서 일어나고 있습니다.
파일 별 전달 기술을 시도해보고 그것이 효과가 있는지 알려주십시오.