사용자 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
명령 줄에서 지정하는 것이 .
답변
한 시스템에 유사한 문제가 있습니다. 사용합니다 (기본 셸은 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 파일을 선택해야하므로 이것이 실제로 필요한지 확실하지 않습니다.)
ssh [email protected] /bin/bash
' 작동하지 않았습니까?