一般的にbashについて
スタートアップファイルに関するBashの設計はかなり独特です。.bashrc
2つの無関係な状況での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の起動には巨視的な時間がかかるため、これは確実に機能しませんが、実際には実行できます。