sshホスト名に基づいて、端末の背景を自動的に変更する方法は?


9

sshを実行するホスト名に基づいて、ターミナルウィンドウの背景色をプログラムでどのように変更できますか?

つまり、実稼働ハードウェアのライブ組み込みシステムにsshを使用する場合、ターミナルの背景を赤に変更して、現在使用しているサーバーの「認識を維持する」ようにします。PS1にホスト名だけを用意するだけでは必ずしも十分ではありません。

gnome-terminalを使用していますが、Linuxで実行可能なソリューションを受け入れます。

回答:


7

ssh LocalCommandを使用して、ANSIエスケープシーケンスを発行して背景色を変更し、ホスト(またはホストパターン)ごとにセクションを設定して、リモートホストに対応する適切な色を選択できます。

本番サーバーが「prodで始まる」のような命名規則に従っている場合は、〜/ .ssh / configファイルで次のスニペットを試すことができます。 Host prod* PermitLocalCommand yes LocalCommand printf "\x1b[41m\x1b[2JPRODUCTION SYSTEM [%n]\n\n"

ワイルドカードパターンを使用するための便利な命名規則がない場合は、スペースで区切ってホスト名をリストするだけで済みます。他のさまざまな本番以外のサーバーについても、異なる色の値と文字列で追加のHostブロックを作成できます。

パターンに一致するホストに接続すると、対応するprintfがローカルで実行され、背景色が赤に変わります([41mは背景色として赤を選択し、[2Jパーツは更新された背景色で画面全体を再描画します。を参照してください。https://en.wikipedia.org/wiki/ANSI_escape_code for more more options)

このアプローチの最大の問題は、sshセッションの終了時に背景色が持続することです。切断時に実行されるLocalCommandに対応するものはありません(私が知っていることです)。sshのエイリアスまたはシェルラッパースクリプトはprintf "\x1b[0m"、リセットとして呼び出すことができます。一方、LocalCommandを介して背景色を設定すると、sshがラッパースクリプトまたはエイリアスを介して実行されない場合でも、色が設定されます。


すばらしい答え!私が見ている唯一の問題は、重要な問題ですが、色の変化が最初の「画面」だけに留まるということです。コマンドが入力され、画面が上にスクロールするとすぐに、赤から黒に戻ります。おそらくgnome-terminal color controlがANSIエスケープシーケンスを上書きしていますか?回避策を知っていますか?
Mtl Dev

SSHホストのPS1プロンプト変数と同様のことを行うことは可能ですか?
Mtl Dev

リセットは、PS1プロンプト変数のシーケンス、またはlsエイリアスのようなコマンドls --color=autoがあり、リセットシーケンス '<ESC> [0m'が含まれている場合に発生する可能性があります。それを維持するには、おそらく、異なるgnome-terminalプロファイルをセットアップし、ラッパースクリプトルートに移動し、ホスト名に基づいてプロファイル名を選択し、起動する必要がありますgnome-terminal --profile=$PROFILE_NAME -e ssh $HOST &
PKapp

正解ですls --colour。PS1にORリセットシーケンスがある場合、どちらか一方だけで以前のansiカラー設定が上書きされます。そこで、提案されたラッパースクリプトソリューションの実装について説明します。これも優れたアイデアです。メルシーボークー!
Mtl Dev 2016

他の人が知っているように:printfを〜/ .ssh / configに追加すると、rsyncが壊れるように見えます。ここに関連する詳細:serverfault.com/questions/267154/...
MTLのDev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.