web-dev-qa-db-ja.com

LinuxでSSH端末を記録する

要塞ホストを構成しています

ジャンプサーバー

サーバーにSSH端末を自動的に記録しようとしています。TermRecordを使用しています。 TermRecord -o ss.html.bashrcに追加すると、問題が発生します。

echo "TermRecord -o ss.html" >> ~/.bashrc

端末は何も保存せずに「スクリプト開始」をフラッディングします。

私はTermRecordの経験がまったくありません。私の答えは、何が起こるかについての合理的な(そう願っています)推測に基づいています。

TermRecordソース.bashrcのように見えます、またはソースを生成する別のbashを実行する可能性が高くなりますファイル。 私は後者を想定しています。とにかく、それは再びTermRecordを実行し、さらに別のbashソース.bashrcを再び実行します。

これによりログインが停止する場合は、 bash_profileまたはbashrc を実行せずにログインするを参照してください。 ssh -t username@hostname /bin/shを試して、そこから.bashrcを修正します。

期待どおりに機能させるには、すでにTermRecord内にある場合にTermRecordの実行を抑制する方法を見つける必要があります。最善の方法は、プログラムが環境に変数を追加して、それを検出できるようにすることです。変数が設定されているかどうかわかりません。

そうでない場合は、自分でこれを行うことができます。の代わりに

TermRecord -o ss.html

.bashrcで次のようなものを使用します。

[ -z "$TR_PPID" ] && { export TR_PPID=$$; TermRecord -o ss.html; }

つまり、変数が空の場合は、それをシェルPIDに設定し、TermRecordを実行します。それ以外の場合は何もしません(次の行に進みます)。

ノート:

  • TR_PPIDという名前の変数がTermRecordなどで使用されていないことを確認してください。私はこの名前を(「TermRecordparend PID」から)作成しましたが、衝突がある可能性があります。
  • ハードコードされた-o ss.htmlは、複数回ログインすると問題が発生する可能性があります。
  • TermRecordが実行されると、残りの.bashrcは、bashが終了するまでに外部のTermRecordによって供給されます。内部のbashは、それ自体でファイルを調達します。
  • プロセスのネストを回避するには、個別のプロセスを作成する代わりに、外側のbashTermRecordに置き換えることを検討してください。 exec TermRecord -o ss.htmlで実行できます。この場合、行全体を.bashrcの最初に配置することをお勧めします。これで、変数は「TermRecord PID」を意味するため、TR_PIDの方が適切な名前になります。

可能な(?)代替手段:ログインシェルとしてTermRecordを使用します。

  • ログインシェルであることをサポートしている場合のみ(これはわかりません)。そうしないと、問題が発生する可能性があります(ただし、カスタムラッパーで修正される可能性があります)。ログインシェル(chshを参照)を変更する実験は、古いシェルを離れることなく、または追加の「緊急シェル」を使用して実行する必要があります。何らかの方法でロックアウトして新たにログインできない場合でも、古いシェルが実行されているので、修正できます。
  • これには、/etc/shellsの編集が必要になる場合があります。
  • この場合、.bashrcからTermRecordを開始しないでください。
2

私が理解しているように、サーバーにSSH接続している間に、すべての端末stdin/stdoutを記録したいですか?

scriptコマンドの使用を検討してください

script <output_filename>

次に、サーバーにsshを実行します。完了したら、ssh接続を閉じて

exit

スクリプトの記録を停止するには、指定した$ output_filenameが現在のディレクトリにあります。

ps:次の規則を使用して、録音に常に一意の名前を付けることができます

script foo_$(date  +"%Y-%m-%d%H%M")   # full date and time included in filename

または

script foo_$(date +%s)  # unique number calculate by seconds since the Unix Epoch
0
Sean Davey