일반적으로 bash에서
시작 파일에 대한 Bash의 디자인은 다소 독특합니다. .bashrc
두 가지 관련이없는 상황에서 배쉬로드 :
일반적으로 SSH
SSH 프로토콜을 통해 명령을 실행하면 명령이 와이어를 통해 문자열로 전달됩니다. 문자열은 원격 쉘에 의해 실행됩니다. 실행할 때 ssh example.com somecommand
원격 사용자의 로그인 쉘이 /bin/bash
이면 SSH 서버가 실행됩니다 /bin/bash -c somecommand
. 로그인 쉘을 우회 할 방법이 없습니다. 이것은 제한된 로그인 쉘을 허용합니다 ( 예 : 일반 명령 실행이 아닌 파일 복사 만 허용) .
한 가지 예외가 있습니다. SSH 프로토콜을 사용하면 클라이언트가 특정 하위 시스템을 요청할 수 있습니다. 클라이언트가 sftp
서브 시스템을 요청하면 기본적으로 OpenSSH 서버는 /usr/lib/openssh/sftp-server
사용자의 로그인 쉘을 통해 프로그램을 호출합니다 (위치는 다를 수 있음). 그러나 라인을 통해 내부 SFTP 서버를 실행하도록 구성 할 수도 있습니다.
Subsystem sftp internal-sftp
에서 sshd_config
파일. 내부 SFTP 서버의 경우이 경우에만 사용자의 로그인 쉘이 무시됩니다.
이 도전에
OverTheWire 산적 (18)의 경우 .bashrc
가 포함
…
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
…
echo 'Byebye !'
exit 0
따라서 bash가 대화식이 아닌 원인이되는 작업을 수행하여이 레벨을 해결할 수 있습니다.
알다시피 SFTP가 작동합니다.
그러나 ssh bandit18@bandit.labs.overthewire.org cat readme
작동합니다.
그렇습니다 echo 'cat readme' | ssh bandit18@bandit.labs.overthewire.org
.
대화 형 로그인 중에 적절한 시간에 Ctrl + C를 누르면 bash가 중단되므로 .bashrc
완전히 실행되지 않습니다. Bash는 시작하는 데 거시적 시간이 걸리므로 안정적으로 작동하지 않지만 실제로 수행 할 수 있습니다.