내가 선호하는 방법은 SSH 구성 파일 (아래 설명 참조)을 사용하는 것이지만 사용법에 따라 가능한 솔루션이 몇 가지 있습니다.
명령 줄 인수
이 접근법에 대한 가장 좋은 대답은 christianbundy의 대답에 대한 대답이라고 생각합니다.
ssh -t example.com "cd /foo/bar; exec \$SHELL -l"
큰 따옴표를 사용하면 이스케이프되지 않은 경우 로컬 시스템에서 변수를 사용할 수 있습니다 ( $SHELL
여기있는 그대로). 또는 작은 따옴표를 사용할 수 있으며 사용하는 모든 변수는 대상 시스템의 변수입니다.
ssh -t example.com 'cd /foo/bar; exec $SHELL -l'
배쉬 기능
bash 함수로 래핑하여 명령을 단순화 할 수 있습니다. 이것을 입력하고 싶다고 가정 해 봅시다.
sshcd example.com /foo/bar
이것을 다음에 추가 하여이 작업을 수행 할 수 있습니다 ~/.bashrc
.
sshcd () { ssh -t "$1" "cd \"$2\"; exec \$SHELL -l"; }
디렉토리의 원격 시스템에 존재하는 변수를 사용하는 경우, 이스케이프하거나 작은 따옴표로 묶어야합니다. 예를 들어, 이것은 JBOSS_HOME
원격 시스템 의 변수에 저장된 디렉토리로 cd됩니다 .
sshcd example.com \$JBOSS_HOME
SSH 구성 파일
추가 명령 줄 인수를 사용하지 않고 일반 ssh 명령을 사용하여 특정 (또는 모든) 호스트에 대해이 동작을 항상 확인하려면 ssh 구성 파일에서 RequestTTY
및 RemoteCommand
옵션을 설정할 수 있습니다 .
예를 들어 다음 명령 만 입력하고 싶습니다.
ssh qaapps18
그러나 항상 다음 명령과 같이 작동하기를 원합니다.
ssh -t qaapps18 'cd $JBOSS_HOME; exec $SHELL'
그래서 이것을 내 ~/.ssh/config
파일에 추가했습니다 .
Host *apps*
RequestTTY yes
RemoteCommand cd $JBOSS_HOME; exec $SHELL
이제이 규칙은 호스트 이름에 "apps"가있는 모든 호스트에 적용됩니다.
자세한 내용은 http://man7.org/linux/man-pages/man5/ssh_config.5.html을 참조하십시오 .