リモートの本番サーバーにSSHで接続するときは、ターミナルウィンドウの配色を明るく怖いもの、できれば赤に変更して、ライブの怖いサーバーに触れていることを警告します。
どこかでsshを実行したことを自動的に検出し、そのどこかが特定のリストにある場合は、配色を変更するにはどうすればよいですか?
Terminal.appのスキームを更新したいのですが、純粋なlinux/unix環境でこれを行う方法がわかりません
次のスクリプトを~/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 "$@"
上記のスクリプトは、行「username @ Host」からホスト名を抽出します(「sshuser @ Host」を使用してリモートホストにログインすることを前提としています)。
次に、ホスト名に応じて、赤の背景(本番サーバーの場合)または緑の背景(その他すべての場合)を設定します。その結果、すべてのsshウィンドウは色付きの背景になります。
ここでは、デフォルトの背景が黒であると想定しているため、リモートサーバーからログアウトすると、スクリプトは背景色を黒に戻します(「trapon_exit」を参照)。
ただし、このスクリプトは、あるホストから別のホストへのsshログインのチェーンを追跡しないことに注意してください。その結果、最初にテストサーバーにログインしてから本番サーバーにログインした場合、背景は緑色になります。
ターミナルのあまり知られていない機能は、設定プロファイルの名前をコマンド名に設定でき、シェル>新しいコマンド…または-のいずれかを使用して新しいターミナルを作成するときにそのプロファイルを選択することです。 シェル>新しいリモート接続…。
たとえば、デフォルトのプロファイルを複製し、「ssh」という名前を付けて、背景色を赤に設定します。次に、新しいコマンド…を使用してssh Host.example.com
を実行します。
また、引数にも一致するため、たとえば、リモートホストごとに異なる設定を選択させることができます。
これは、出口を処理するいくつかの既存の回答に基づく組み合わせソリューションです。 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
}
作成~/bin/ssh
ファイル 1 で説明されているように、次の内容が含まれています。
#!/bin/sh
# https://stackoverflow.com/a/39489571/1024794
log(){
echo "$*" >> /tmp/ssh.log
}
HOSTNAME=`echo $@ | sed s/.*@//`
log HOSTNAME=$HOSTNAME
# to avoid changing color for commands like `ssh user@Host "some bash script"`
# and to avoid changing color for `git Push` command:
if [ $# -gt 3 ] || [[ "$HOSTNAME" = *"git-receive-pack"* ]]; then
/usr/bin/ssh "$@"
exit $?
fi
set_bg () {
if [ "$1" != "Basic" ]; then
trap on_exit EXIT;
fi
osascript ~/Dropbox/macCommands/StyleTerm.scpt "$1"
}
on_exit () {
set_bg Basic
}
case $HOSTNAME in
"178.222.333.44 -p 2222") set_bg "Homebrew" ;;
"178.222.333.44 -p 22") set_bg "Ocean" ;;
"192.168.214.111") set_bg "Novel" ;;
*) set_bg "Grass" ;;
esac
/usr/bin/ssh "$@"
実行可能にする:chmod +x ~/bin/ssh
。
ファイル~/Dropbox/macCommands/StyleTerm.scpt
の内容は次のとおりです。
#https://superuser.com/a/209920/195425
on run argv
tell application "Terminal" to set current settings of selected tab of front window to first settings set whose name is (item 1 of argv)
end run
言葉Basic, Homebrew, Ocean, Novel, Grass
はmacos端末設定からのものです cmd,:
.bashrcで$ PS1変数を設定できます。
red='\e[0;31m'
PS1="$\[${red}\]"
編集:これを行うには、ターミナルを開きます。次に言う
#touch .bashrc
次に、textEditまたは TextWrangler で.bashrcを開き、前のコマンドを追加できます。
別の解決策は、ssh設定ファイルで色の条件を設定することです。
〜/ .ssh/config内
Host Server1
HostName x.x.x.x
User ubuntu
IdentityFile ~/Desktop/keys/1.pem
PermitLocalCommand yes
LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {27655, 0, 0, -16373}"
Host Server2
HostName x.x.x.x
User ubuntu
IdentityFile ~/Desktop/keys/2.pem
PermitLocalCommand yes
LocalCommand osascript -e "tell application \"Terminal\" to set background color of window 1 to {37655, 0, 0, -16373}"
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
/.bashrc
で端末の色を設定します同じことが必要でした。開発環境ではなく、ステージングサーバーまたは本番サーバーにいることを認識させるためのものでした。これは、特にRubyコンソールの場合は非常にわかりにくい場合があります。か何か。
これを実現するために、サーバーの~./bashrc
ファイルでsetterm
コマンドを使用して、接続時に端末の色を反転し、終了時に色を復元しました。
# Inverts console colours so that we know that we are in a remote server.
# This is very important to avoid running commands on the server by accident.
setterm --inversescreen on
# This ensures we restore the console colours after exiting.
function restore_screen_colours {
setterm --inversescreen off
}
trap restore_screen_colours EXIT
次に、これをすべてのサーバーの~/.bashrc
ファイルに入れて、端末がリモートサーバー上にあるかどうかを確認します。
もう1つのボーナスは、開発チームまたはDevOpsチームが、オンボーディングプロセスの一部にすることなく、このメリットを享受できることです。
うまくいきます。