簡単なクライアント側ソリューションの場合:
alias connect='ssh -t root@server "bash -o vi"'
ルートのシェル初期化スクリプトが明示的にを使用set -o emacs
または設定EDITOR
しているemacs
場合、またはルートの.initrc
ファイルがemacs
キーバインディングを呼び出している場合、これは失敗します。
この回答の残りの部分は、サーバー側のソリューションに関するものです。
これはssh
、マシンにアクセスしてから使用すると機能しますsudo -i
。
あなたのために/root/.bashrc
:
if [[ -n "$SUDO_USER" ]] && [[ -f /root/.bashrc-"$SUDO_USER" ]]; then
source /root/.bashrc-"$SUDO_USER"
fi
これにより、bashrc
という名前の個人用ファイルを作成して、/root/.bashrc-patrick
などの好きなことを何でもできるようになりset -o vi
ます。
これを、以下に応じてそのrcファイルを取得するためのやや素朴なアプローチと組み合わせる$SSH_CLIENT
:
if [[ -n "$SUDO_USER" ]]; then
person="$SUDO_USER"
elif [[ -n "$SSH_CLIENT" ]]; then
case "$SSH_CLIENT" in
192.168.216.100*) person="joe" ;;
192.168.216.120*) person="patrick" ;;
192.168.216.150*) person="lindsey" ;;
esac
fi
if [[ -n "$person" ]] && [[ -f /root/.bashrc-"$person" ]]; then
source /root/.bashrc-"$person"
fi
これは明らかに、常に同じIPアドレスから接続している場合にのみ機能します...
SSHエージェントをサーバーに転送する場合に機能する、使用している特定のSSHキーのコメントフィールドを使用する別のアプローチ:
ssh_comment="$( ssh-add -L | grep -f /root/.ssh/authorized_keys | awk '{ print $NF '} | head -n 1 )"
これにより、サーバーへの接続に使用したキーのコメントフィールドが選択されます。これhead -n 1
は、authorized_keys
ファイルにいくつかのキーが含まれている場合に備えてあります。
次に、を使用$ssh_comment
してソースにrcファイルを選択するか、$SUDO_USER
上記のアプローチと直接($ssh_comment
パス名の場合はコメントをクリーンアップする必要がある場合があります)、またはアプローチcase
と同じようにステートメントを使用し$SSH_CLIENT
ます。
set -o vi
シェルを制御する前に静かに実行される暗いOpenSSHの魔法。