簡単なクライアント側ソリューションの場合:
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の魔法。