SFTPはどのような点でSSHに基づいていませんか?

SFTPはどのような点でSSHに基づいていませんか?

私は終わりました。OverTheWire Bandit Warゲーム、レベル18

これは驚くべきことです。以下はこのレベルの説明です。

次のレベルのパスワードはファイルに保存されます。閲覧ファイルホームディレクトリにあります。誰が修正したのが残念です。.bashrcSSHを使用してログインするとログアウトします。

シェルに購入をスキップさせる方法を考えています.bashrc。しかし、解決策が見つかるまでは、単にサーバーへのSFTP接続を開始したいという誘惑があります。私はそれがうまくいくとは思わなかった。しかし、そうでした。理由を知りたいです。 SFTPがSSHを介して実行されると思いました。

明らかに、期待どおりにサーバーにSSHで接続すると、サーバーから追い出されます。

ベストアンサー1

Bashに関する一般情報

Bashのスタートアップファイルのデザインはかなり奇妙です。 Bashは、.bashrc関連していない2つの状況でロードされます。

  • 対話型シェルの場合、そうでない場合ログインシェル(として呼び出されない限りsh)。だからこそ.bash_profile一般負荷.bashrc
  • バッシュがあるときいいえInteractiveはログインシェルでも、asへの呼び出しでもありませんが、sh実行するコマンドが提供され、設定されていない-cSHLVL、1以下で、次のいずれかがtrueです。

    • 標準入力がソケットの場合。実際、これはbashが呼び出されると主に発生します。rshdつまり実行中ですrsh remotehost.example.com somecommand
    • コンパイル時に有効になっている場合(Debianやその派生製品などの一部のディストリビューションでは)、SSH_CLIENT環境変数の1つが定義されます。SSH2_CLIENT実際、これはsshdInternet Explorerでbashを呼び出すことを意味しますssh remotehost.example.com somecommand
      Bashのコンパイル方法がわからない場合は、バイナリに次の文字列が含まれていることを確認して、このオプションが設定されていることを確認できますSSH_CLIENT

      strings /bin/bash | grep SSH_CLIENT
      

SSHに関する一般情報

SSHプロトコルを介してコマンドを実行すると、コマンドは文字列として接続を介して渡されます。この文字列はリモートシェルによって実行されます。を実行すると、ssh example.com somecommandリモートユーザーのログインシェルがあると/bin/bashSSHサーバーが起動します/bin/bash -c somecommand。ログインシェルをバイパスする方法はありません。これにより、次の制限付きログインシェルが可能になります。ファイルのコピーのみ許可一般的なコマンド実行の代わりに。

1つの例外があります。 SSH プロトコルを使用すると、クライアントは特定のサブシステムを要求できます。クライアントがこのsftpサブシステムを要求すると、デフォルトでOpenSSHサーバーは/usr/lib/openssh/sftp-serverユーザーのログインシェル(場所は異なる場合があります)を介してこのプログラムを呼び出します。ただし、有線経由で内部SFTPサーバーを実行するように構成することもできます。

Subsystem sftp internal-sftp

sshd_configファイルから。内部SFTPサーバーの場合、この場合にのみユーザーのログインシェルがバイパスされます。

この挑戦のために

OverTheWire Bandit 18.bashrc用含まれています


# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
echo 'Byebye !'
exit 0

したがって、bashを非対話型にするすべてのタスクを実行して、このレベルを解決できます。

見つかったとおり、SFTPが機能します。
しかし、それも動作します。そのまま。対話型ログイン中にCtrl + Cをタイムリーに押しても機能します。 bash が中断されるため、完全には実行されません。 Bashは起動に巨視的な時間がかかるため、信頼できませんが、実際には実行できます。 ssh [email protected] cat readme
echo 'cat readme' | ssh [email protected]
.bashrc

おすすめ記事