저는 $HOME/.bashrc
호스팅 서버 CentOS 7을 실험 중이었고 사용자 지정 사용자 설정 없이 어떻게 작동하는지 확인하기로 결정했습니다.
나는 exit 0
그것을 전에 추가했다 source /etc/bashrc
.
내 짧은 관찰에 따르면 힌트와 색상만 포함된 것 같습니다. 그러나 사용자 액세스 제어도 관리하는 것으로 보입니다.
이제 로그인하려고 하면 쫓겨납니다.
왜 이런 일이 발생합니까?
원격으로 수리가 가능한가요?
저는 주로 SSH를 사용하여 로그인합니다. 이 문제를 해결하기 위해 설정할 수 있는 속성이나 변수가 있습니까?
답변1
bash가 올바르게 작동한다면 .bashrc
쉘이 대화형 쉘인 경우에만 호출해야 합니다. 따라서 다음이 작동해야 합니다.
ssh server rm .bashrc
또는
ssh server mv .bashrc .bashrc-off
이렇게 하면 서버에 비대화형 셸이 생성되므로 셸은 .bashrc 문제의 영향을 받지 않습니다.
불행하게도 많은 Linux 배포판은 .profile
호출을 제공하는데 .bashrc
, 이 경우 길을 잃습니다.
답변2
~/.bashrc
Bash는 대화식으로 실행 중인지 여부에 관계없이 sshd에 의해 실행되고 있다고 판단할 때마다 소스 코드를 직접 가져옵니다.(1).
bash가 이를 결정하는 방법은 다음과 같습니다.ㅏ)envvar는 SHLVL
1보다 작고비)SSH_CLIENT
또는 envvars가 SSH2_CLIENT
설정되었거나 stdin이연결된 소켓.
예:
$ echo echo this sux > /tmp/.bashrc
$ HOME=/tmp bash -c true
$ HOME=/tmp SHLVL= SSH_CLIENT= bash -c true
this sux
ksh93에서 bash를 호출할 때 stdin은 유닉스 도메인 소켓 쌍을 사용하여 파이프를 구현하는 소켓이 될 수도 있습니다.
$ ksh93 -c ': | HOME=/tmp SHLVL= bash -c :'
this sux
도저히 방법이 생각나지 않네요우회로SSH를 통해 실행하는 경우 ~/.bashrc
(사용자가 추가 환경 변수를 설정할 수 있는 등 SSH 구성 오류를 악용하는 것 외에도)
어쨌든, 내가 아는 한, 많은 시스템 관리자는 사용자가 이를 우회할 수 없다고 보장하거나 보장하지 않는 것 같습니다.
(1)이 행동은파일에 기록하다:
Bash는 원격 셸 데몬(일반적으로 rshd) 또는 보안 셸 데몬 sshd에 의해 실행되는 경우와 같이 네트워크 연결에 연결된 표준 입력을 사용하여 실행 중인지 확인하려고 시도합니다. bash가 이런 방식으로 실행 중이라고 판단하면 다음에서 명령을 읽고 실행합니다
~/.bashrc
(파일이 존재하고 읽을 수 있는 경우).
데비안에서는 /etc/bash.bashrc
이전에도 획득 할 수 있습니다 ~/.bashrc
(문서화되지 않음).
답변3
댓글을 요약합니다.
SSH가 종료되는 이유 는 무엇 exit
입니까 ?.bashrc
Paul_Pedant의 댓글
귀하의 프로필은 로그인 셸에서 생성됩니다.수행되지 않음. 따라서
exit
로그인 쉘 자체를 종료하십시오.
원격으로 수리가 가능한가요?
엠마 루오의 코멘트
sftp user@host
호스트에서 구성된 방식(내부적으로 또는 명령을 통해)에 따라 를 통해 액세스할 수 있습니다 .
roaima 이와 같은 상황을 피하기 위한 최고의 조언
쉘이 루트로 로그인하도록 하십시오. 그런 다음 다른 세션을 사용하여 다시 로그인해 보십시오. 시스템 파일을 편집할 때 항상
...
질문을 마무리하기 위해 이 댓글을 게시합니다. @Paul_Pedant 또는 @roaima가 답변을 게시하면 수락하겠습니다.
답변4
나도 똑같은 일을했습니다. Zsh와 동등한 Bash인 exit 0
서버의 끝에 추가 했습니다 . 당신처럼 나도 내 서버에 로그인할 수 없습니다..zshrc
.bashrc
기존 명령을 덮어쓰지 않고 a 명령(안전 복사)을 사용하여 scp
문제를 해결했습니다 . 예를 들면 다음과 같습니다..zshrc
exit 0
scp ~/.zsh/.zshrc my-server/.zsh/
바라보다! 내 서버에 다시 로그인할 수 있습니다.