リモートの本番サーバーに SSH で接続するとき、ターミナル ウィンドウの配色を明るく恐ろしいもの、できれば赤に変更して、ライブの恐ろしいサーバーに触れていることを警告したいと思います。
どこかで ssh したことを自動的に検出し、その場所が特定のリストにある場合は、配色を変更するにはどうすればよいですか?
Terminal.app のスキームを更新したいのですが、純粋な linux/unix 環境でこれを行う方法がわかりません
リモートの本番サーバーに SSH で接続するとき、ターミナル ウィンドウの配色を明るく恐ろしいもの、できれば赤に変更して、ライブの恐ろしいサーバーに触れていることを警告したいと思います。
どこかで ssh したことを自動的に検出し、その場所が特定のリストにある場合は、配色を変更するにはどうすればよいですか?
Terminal.app のスキームを更新したいのですが、純粋な linux/unix 環境でこれを行う方法がわかりません
次のスクリプトを挿入します (PATH の前にチェックが入っている~/bin/ssh
ことを確認してください)。~/bin/
/usr/bin/
#!/bin/sh
HOSTNAME=`echo $@ | sed s/.*@//`
set_bg () {
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}
on_exit () {
set_bg "{0, 0, 0, 50000}"
}
trap on_exit EXIT
case $HOSTNAME in
production1|production2|production3) set_bg "{45000, 0, 0, 50000}" ;;
*) set_bg "{0, 45000, 0, 50000}" ;;
esac
/usr/bin/ssh "$@"
実行してスクリプトを実行可能にすることを忘れないでくださいchmod +x ~/bin/ssh
上記のスクリプトは、「username@host」行からホスト名を抽出します (「ssh user@host」でリモート ホストにログインすることを前提としています)。
次に、ホスト名に応じて、赤の背景 (本番サーバーの場合) または緑の背景 (その他すべての場合) を設定します。その結果、すべての ssh ウィンドウの背景が色付きになります。
ここでは、デフォルトの背景が黒であると想定しているため、リモート サーバーからログアウトすると、スクリプトは背景色を黒に戻します (「trap on_exit」を参照)。
ただし、このスクリプトは、あるホストから別のホストへの ssh ログインのチェーンを追跡しないことに注意してください。その結果、最初にテスト サーバーにログインしてから、そこから本番環境にログインすると、背景が緑色になります。
これは、出口を処理するいくつかの既存の回答に基づく組み合わせソリューションです。また、16 ビットのカラー値を処理したくない場合は、少し余分に含まれます。
これは~/.bash_profileに入れる必要があります
# Convert 8 bit r,g,b,a (0-255) to 16 bit r,g,b,a (0-65535)
# to set terminal background.
# r, g, b, a values default to 255
set_bg () {
r=${1:-255}
g=${2:-255}
b=${3:-255}
a=${4:-255}
r=$(($r * 256 + $r))
g=$(($g * 256 + $g))
b=$(($b * 256 + $b))
a=$(($a * 256 + $a))
osascript -e "tell application \"Terminal\" to set background color of window 1 to {$r, $g, $b, $a}"
}
# Set terminal background based on hex rgba values
# r,g,b,a default to FF
set_bg_from_hex() {
r=${1:-FF}
g=${2:-FF}
b=${3:-FF}
a=${4:-FF}
set_bg $((16#$r)) $((16#$g)) $((16#$b)) $((16#$s))
}
# Wrapping ssh command with extra functionality
ssh() {
# If prod server of interest, change bg color
if ...some check for server list
then
set_bg_from_hex 6A 05 0C
end
# Call original ssh command
if command ssh "$@"
then
# on exit change back to your default
set_bg_from_hex 24 34 52
fi
}
.bashrc で $PS1 変数を設定できます。
red='\e[0;31m'
PS1="$\[${red}\]"
編集:これを行うには、ターミナルを開きます。それから言う
#touch .bashrc
その後、textEdit またはTextWranglerで .bashrc を開き、前のコマンドを追加できます。
Xterm 互換の Unix 端末には、背景色と前景色を設定するための標準のエスケープ シーケンスがあります。Terminal.app がそれらを共有しているかどうかはわかりません。そうすべき。
case $HOSTNAME in
live1|live2|live3) echo -e '\e]11;1\a' ;;
testing1|testing2) echo -e '\e]11;2\a' ;;
esac
2 番目の数値は、目的の色を指定します。0=デフォルト、1=赤、2=緑などです。したがって、このスニペットを共有 .bashrc に配置すると、ライブ サーバーでは赤の背景、テスト サーバーでは緑の背景が表示されます。ログアウト時に背景をリセットするには、次のようなものも追加する必要があります。
on_exit () {
echo -e '\e]11;0\a'
}
trap on_exit EXIT
編集: Google はAppleScript を使用して背景色を設定する方法を発見しました。明らかに、これは Terminal.app と同じマシンで実行した場合にのみ機能します。いくつかのラッパー関数を使用してこれを回避できます。
set_bg_color () {
# color values are in '{R, G, B, A}' format, all 16-bit unsigned integers (0-65535)
osascript -e "tell application \"Terminal\" to set background color of window 1 to $1"
}
sshl () {
set_bg_color "{45000, 0, 0, 50000}"
ssh "$@"
set_bg_color "{0, 0, 0, 50000}"
}
ライブサーバーに接続するときは、ssh ではなく sshl を実行することを忘れないでください。別のオプションは、既知のライブ ホスト名の引数をスキャンし、それに応じて背景を設定する ssh のラッパー関数を作成することです。
SSH 経由でログインするたびにシェル プロンプトを変更しないのはなぜですか? 通常、特定のシェル変数があります: SSH_CLIENT、SSH_CONNECTION、SSH_TTY