로그인 후 SSH가 구성에 따라 디렉토리를 강제로 변경하도록 합니다.

로그인 후 SSH가 구성에 따라 디렉토리를 강제로 변경하도록 합니다.

ssh작업 디렉토리를 강제로 변경 ~/.ssh/config하거나 다른 구성 파일을 사용하는 방법이 있습니까 ?

다양한 환경의 서버가 많이 있습니다. 각 환경은 특정 디렉터리에 설치되므로 로그인 후 바로 해당 디렉터리로 이동하는 것이 매우 유용할 수 있습니다.

불행하게도 때로는 동일한 서버에서 여러 환경을 호스팅하는 것이 가능합니다.

이것이 바로 구성 기반으로 만들어야 하는 이유입니다. 현재 각 환경에 대한 구성에 별도의 항목이 있기 때문입니다. 예:

Host env1
User me
Port 2222
# here directory should be /srv/project/env1
HostName 172.16.16.2

Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
HostName 172.16.16.2

Host env54
User me
Port 2225
# here directory should be /srv/project/env54
HostName 172.16.16.3

이렇게 하는 데 사용할 수 있지만 ssh -t env54 'cd /srv/project/env54 ; bash'삽입하려면 매번 다시 입력해야 합니다 alias.

나는 *nix 방식이 구성을 통해 이를 처리하는 것이라고 믿습니다.

답변1

서버 .profile또는 로그인 시 실행되는 모든 항목에서:

if [ -n "$USE_DIR_A" ]; then
    cd dir_a
elif [ -n "$USE_DIR_B" ]; then
    cd dir_b
fi

그런 다음 로컬 컴퓨터에 설정하십시오.둘 다변하기 쉬운:

export USE_DIR_A=yes
export USE_DIR_B=yes

그리고 .ssh/config다음과 같이 설정을 지정하세요.

Host env1
User me
Port 2222
# here directory should be /srv/project/env1
SendEnv USE_DIR_A
HostName 172.16.16.2

Host env2_test
User me
Port 2222
# here directory should be /srv/project/env2_test
SendEnv USE_DIR_B
HostName 172.16.16.2

물론 변수를 보내고 해당 변수를 각 시스템에 대해 원하는 디렉터리로 설정하는 ssh 구성을 가질 수 있지만 이는 사용자가 요구하는 것이 아닙니다.

그러나 SSH 연결 공유에 유의하세요. 이는 후속 연결이 시작될 때 실행되는 스크립트에 영향을 미칠 수 있습니다.

답변2

command=cd /srv/project/env1 && bash원격 서버 파일 ~/.ssh/authorized_key의 플래그를 사용하여 원본 서버에 대한 적절한 공개 키를 얻을 수 있습니다. 자세한 내용은 여기를 확인하세요.질문serverfault 및 Authorized_keys 파일의 공개 키 명령과 같은 유용한 옵션에 대한 자세한 내용은 다음을 확인하세요.블로그.

테스트 머신(Virtualbox의 Centos 6.5)에서 이것을 시도했는데 훌륭하게 작동했습니다.

[root@CentOS-VM1 ~]# ssh nischay@localhost
[nischay@CentOS-VM1 demo]$ pwd
/tmp/demo

내용 ~/.ssh/authorized_keys

command="cd /tmp/demo && bash" ssh-dss AAAAB3NzaC1kc3MAAACBAOEKjYcSts6XZEtdzlYCAArgijN2yzi1RwlhOf7E2LHPqUI6z+od9Ye/E5e0imaJhyGvfb21b6o3U6PzWrwVIGZn9TA2/iiaaQS2R2w60/R07FY1tmas8y6TTmfelir/ZfAQnq4OT1KEf5SsYk4TIaC1h5gIL3wGhZyh54dsL1w1AAAAFQCj22qNcmQPToLi/P7sXH3SplxK8QAAAIEAsbiS8hQMjE0HkdCL0sT8/GFBJIo8EuNQh4AEjRv/5DU8Vk5i1CV7qO//spp8h/l5cDBWEC30VBWYk9jbN647VQonn24oXz3aXyQCsPYuqCDGl1MqhUdbHunXk9+YSU7Z13xc66LOD+oURJxFGTzndG5TnvPwhbSZsxebWMPlciYAAACAAe/gdrLn4Zkdp72Oa4JYKbaVD0rhW/p5eg+lSX8cm1m6nbYvGzcfaKF3cKTggGJH37IrDpMnAmuxzFJOryefDeUqGd/HmUOVN8PFnIJpSDQ1StOFx+0WwpiOHLXF4aaOpE/3SLrweuxywWDv4wymp0rXoSzL4mtNtB+u3pEOTgU= root@CentOS-VM1

포트 번호, 호스트 이름 별칭, 사용자 이름, 개인 키 및 포트 전달 옵션과 같은 기타 옵션은 ~/.ssh/config소스 상자의 파일에서 언급할 수 있습니다.

답변3

귀하의 질문을 올바르게 이해했으며 환경마다 다른 SSH 포트가 있다고 가정합니다. 만일이 경우라면:-

.bash_profile각 원격 컴퓨터에 다음 변형을 추가합니다.

if [[ ! -z $SSH_CLIENT ]]; then
    PORT=$(echo "$SSH_CLIENT" | awk '{print $3}')
    case $PORT in
        2222)
            cd /srv/project/env1
        ;;
        2225)
            cd /srv/project/env2
        ;;
    esac
if

관련 정보