私の仕事では、SSHを介してさまざまなコンピュータに接続する必要があります。生活をより便利にするために、私がどのマシンを使用しているかを一目でわかるように、各マシンのカラースキームを自動的に設定しようとしました。
これはほぼ布材。
~/.ssh/config:
Host some-remote-server
Hostname some-remote-server.ac.uk
User myusername
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
ForwardX11 yes
Host some-other-remote-server
Hostname some-other-remote-server.ac.uk
User myusername
IdentityFile ~/.ssh/id_rsa
ForwardAgent yes
ForwardX11 yes
ProxyCommand ssh -Y some-remote-server -W %h:%p
ControlMaster auto
ControlPath /tmp/ssh-socket-%r@%h-%p
ControlPersist 600
「some-remote-server」と「some-other-remote-server」の両方を青色に設定し、「my-local-server」を赤色に設定したいとします。
ログインに問題はありません。 "~/.profile"に色スキームを適切に設定するコードがあります。ところがログアウトが問題ですね。
~/.bash_logout:
if [[ $- == *i* ]]; then
ORIGIN_HOST=`who am i | awk -F"[()]" '{print $2}'`
$HOME/bin/set_the_colorscheme $ORIGIN_HOST
fi
my-local-serverからsome-other-remote-serverへのsshセッションを終了すると、上記のスクリプトは$ ORIGIN_HOSTを「some-remote-server」(b / My SSH構成ファイルcのControlMaster設定)として識別します。色は青のままです。
ControlMasterを使用していることを検出し、元のsshコマンドを実行したホストを見つける方法はありますか?
ありがとうございます。
答え1
実際の目標は、SSHセッションを終了した後に端末設定を復元することです。これは以前のソリューションとは少し異なるソリューションです。他の投稿に基づくソリューションは次のとおりです。
SSHセッションが終了した後にいくつかのコードを実行するようにラッパー/シム関数を定義できます。
function ssh () { command ssh "$@"; echo "SSH session terminated!"; }
このラッパーを使用すると、現在のホストに基づいて端末環境をリセットできます。具体的には、次のことができます。
$ mkdir -p ~/.ssh/exit_scripts
$ cat <<HEREDOC > "${HOME}/.ssh/exit_scripts/${HOSTNAME}"
# Host-specific script goes here
echo "I'm on $(hostname)"
HEREDOC
$ function ssh () { command ssh "$@"; source "${HOME}/.ssh/exit_scripts/${HOSTNAME}"; }