一般的にbashについて
スタートアップファイルに関するBashの設計はかなり独特です。.bashrc2つの無関係な状況でのBashロード:
SSH全般
SSHプロトコルを介してコマンドを実行すると、コマンドは文字列としてネットワーク経由で渡されます。文字列はリモートシェルによって実行されます。を実行するssh example.com somecommandと、リモートユーザーのログインシェルがの/bin/bash場合、SSHサーバーが実行され/bin/bash -c somecommandます。ログインシェルをバイパスする方法はありません。これにより、たとえば、ファイルのコピーのみを許可し、一般的なコマンドの実行を許可しないなど、ログインシェルを制限できます。
1つの例外があります。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の起動には巨視的な時間がかかるため、これは確実に機能しませんが、実際には実行できます。