要塞ホストを構成しています
ジャンプサーバー
サーバーに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
は、それ自体でファイルを調達します。bash
をTermRecord
に置き換えることを検討してください。 exec TermRecord -o ss.html
で実行できます。この場合、行全体を.bashrc
の最初に配置することをお勧めします。これで、変数は「TermRecord PID」を意味するため、TR_PID
の方が適切な名前になります。可能な(?)代替手段:ログインシェルとしてTermRecord
を使用します。
chsh
を参照)を変更する実験は、古いシェルを離れることなく、または追加の「緊急シェル」を使用して実行する必要があります。何らかの方法でロックアウトして新たにログインできない場合でも、古いシェルが実行されているので、修正できます。/etc/shells
の編集が必要になる場合があります。.bashrc
からTermRecord
を開始しないでください。私が理解しているように、サーバーに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