51

リモートの本番サーバーに SSH で接続するとき、ターミナル ウィンドウの配色を明るく恐ろしいもの、できれば赤に変更して、ライブの恐ろしいサーバーに触れていることを警告したいと思います。

どこかで ssh したことを自動的に検出し、その場所が特定のリストにある場合は、配色を変更するにはどうすればよいですか?

Terminal.app のスキームを更新したいのですが、純粋な linux/unix 環境でこれを行う方法がわかりません

4

10 に答える 10

53

次のスクリプトを挿入します (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 ログインのチェーンを追跡しないことに注意してください。その結果、最初にテスト サーバーにログインしてから、そこから本番環境にログインすると、背景が緑色になります。

于 2008-10-03T10:12:06.057 に答える
8

これは、出口を処理するいくつかの既存の回答に基づく組み合わせソリューションです。また、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
}
  • set_bg - 4 (8 ビット) のカラー値を取ります
  • set_bg_from_hex - 4 つの 16 進数値を取ります。私が使用する色の参照のほとんどは 16 進数であるため、これにより簡単になります。RR GG BB の代わりに #RRGGBB を実際に解析するためにさらに一歩進めることもできますが、私にとってはうまく機能します。
  • ssh - デフォルトの ssh コマンドを任意のカスタム ロジックでラップします。if ステートメントは、終了を処理して背景色をリセットするために使用されます。
于 2015-09-24T12:05:32.410 に答える
5

.bashrc で $PS1 変数を設定できます。

red='\e[0;31m'
PS1="$\[${red}\]"

編集:これを行うには、ターミナルを開きます。それから言う

#touch .bashrc

その後、textEdit またはTextWranglerで .bashrc を開き、前のコマンドを追加できます。

于 2008-10-01T14:44:45.147 に答える
2

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 のラッパー関数を作成することです。

于 2008-10-01T15:21:13.407 に答える
1

SSH 経由でログインするたびにシェル プロンプトを変更しないのはなぜですか? 通常、特定のシェル変数があります: SSH_CLIENTSSH_CONNECTIONSSH_TTY

于 2008-10-01T14:44:38.533 に答える