
.profile에 다음 스크립트를 생성하여 각 SSH 세션이 해당 위치로 직접 이동하도록 하고 싶습니다.
- 지정된 호스트(user@host)를 확인하세요.
- 호스트 = 호스트1인 경우 -- cd /var/www/site1
등.
돕다! :)
답변1
나는 SSH가 호스트 이름을 서버에 보내지 않는다고 확신합니다. (단지 IP 주소를 조회하고 키 등을 확인하기 위해 로컬로 사용합니다.) 적어도 쉘 스크립트에서 사용할 수 있는 방식은 아닙니다.
출력을 참조하십시오 env
. ssh 명령에 사용된 이름에 관계없이 유일한 호스트 이름은 정식 호스트 이름입니다.
일부 SSH 클라이언트와 일부 SSH 서버는 클라이언트가 하나 이상의 환경 변수에 대한 값을 지정할 수 있도록 허용합니다. 아마도 이를 사용하여 전환할 디렉터리를 서버에 알릴 수 있습니다. 예를 들어 퍼티를 참조하세요.구성, 연결, 데이터또는 오픈SSHSendEnv옵션.
그렇지 않으면 도메인 이름이 다른 각 웹사이트마다 하나의 사용자 ID를 가지거나 사용자에게 메뉴를 제공해야 합니다.
답변2
귀하의 질문이 불분명합니다. 여러 별칭을 통해 동일한 호스트에 연결하고 있습니까? 을 공유하는 다른 호스트에 연결하고 있습니까 .profile
? 소스 호스트 이름 또는 대상 호스트 이름을 기반으로 명령을 실행하려고 합니까?
다른 원격 호스트에 다른 효과를 적용하려면 원격 호스트 이름을 테스트하면 됩니다.
case "$(hostname)" in
host1) cd /var/www/site1;;
esac
동일한 호스트에서 다른 효과를 원할 경우 SendEnv
다음 명령을 사용할 수 있습니다.~/.ssh/config
환경 변수를 보내려면(다음을 사용한다고 가정)오픈SSH고객). 이러한 기능은 다음을 사용하여 활성화해야 합니다.AcceptEnv
이는 서버 측의 지시문입니다. 이는 종종 그렇지 않은 경우입니다. 그러나 LC_*
변수는 일반적으로 허용되므로 이를 사용하여 정보를 전달할 수 있습니다. 클라이언트 측에서 를 실행합니다 LC_VIRTUAL_HOST=site1 ssh common-host.provider.com
. .profile
서버 에서 다음을 작성하십시오.
case "$LC_VIRTUAL_HOST" in
host1) cd /var/www/site1;;
esac