ssh 세션에 대한 셸 지정

사용자 www-data로 ssh를 통해 원격 서버에 로그인하고 있습니다. 서버의 사용자 www-data의 기본 셸은 /bin/sh로 설정되어 있으며 로그인하면 대시가 셸로 표시됩니다. 그런 다음 bash를 입력하고 bash 셸을 가져올 수 있습니다.

다음과 같은 경우 bash에 직접 로그인하고 싶습니다. ssh in.하지만 서버의 기본 셸을 변경하고 싶지 않습니다. 변경 사항이 ssh 세션에만 적용되기를 원합니다.

command="/bin/bash" infront of my public key in .ssh/authorized_keys, 그러나 이것은 또 다른 부작용이 있습니다. bash는 로그인 할 때 기본 셸로 작동하지만 scp 작동이 중지되었습니다. 더 이상 remore 서버에서 파일을 scp 할 수 없습니다.

bash 다른 애플리케이션을 중단하지 않고 ssh 세션의 기본 셸로?

댓글

  • ssh [email protected] /bin/bash ' 작동하지 않았습니까?
  • @DopeGhoti : 나 ' m 또한 궁금하지만 ' ' 그의

구문.

  • ssh 명령 줄에서 지정하는 것이
  • .

    답변

    한 시스템에 유사한 문제가 있습니다. 사용합니다 (기본 셸은 bash이고, ksh93를 원하며 chsh는 사용하지 않습니다. 작업).

    내 상황에 맞게 조정 된 솔루션은 ~/.profile에서 원하는 셸을 exec하는 것입니다. 대시는 시작시 읽습니다. Bash는 ~/.bash_profile 또는 ~/.bash_login를 찾지 못하면 ~/.profile를 터치하지 않습니다 ( 순서는 Bash 설명서를 참조하십시오.

    # in ~/.profile: if [ "$SHELL" != "/usr/bin/bash" -a -n "$SSH_TTY" -a -x /usr/bin/bash ]; then export SHELL="/usr/bin/bash" exec $SHELL -l fi 

    SSH는 대화 형 SSH 세션에서 SSH_TTY를 설정합니다. Bash를 사용할 수 있는지 확인하고 실행하기 전에 설정 (빈 문자열이 아님) 여부를 다시 확인합니다. 다른 응용 프로그램에서 볼 경우를 대비하여 SHELL를 설정하고 내보내고, ~/.bash_profile~/.bash_login로 인해 ~/.profile를 다시 실행하려고합니다.

    댓글

    • 감사합니다. 한 가지 중요한 수정을 통해 제안 된 접근 방식이 작동합니다. $SHELL -l를 실행하면 포크 폭탄이 발생했습니다. 분명히 bash -l.profile를 읽습니다. -l를 생략하면 모든 것이 예상대로 작동합니다.
    • 아마도 ~/.bash_profile~/.bash_login?
    • 내 답변에 대한 수정 사항을 확인하면 if 문은 ' 이미 Bash를 실행중인 경우 실패합니다. (대신 다른 init 파일을 선택해야하므로 이것이 실제로 필요한지 확실하지 않습니다.)

    답글 남기기

    이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다