私は特定の「PS1」プロンプトを使用しています。いくつかのログインをいくつかの異なるサーバー上の他のユーザーと共有します。ローカルのbashプロファイルでリモートプロンプトを指定する方法があるのか、それともリモートでアクセスするたびにコピーして貼り付ける以外の方法があるのかと思いました。
各リモートマシンにファイルをアップロードします。たとえば、~/.my_custom_bashrc
をカスタムbash
構成で(この場合はPS1=...
で)アップロードし、ssh
を次のコマンドで起動します。
ssh user@Host -t "bash --rcfile ~/.my_custom_bashrc -i"
読みやすくするためのラッパーとして、bash
関数を簡単に使用できます。
PS1
変数を送信するだけで、'
(一重引用符)が含まれていない場合は、以下を試してください。
ssh targethost -t "PS1='$PS1'; exec bash"
ローカルの.bashrc
はPS1
を上書きする可能性があります(これを指摘してくれた Dennis Williamson に感謝します)。
ssh経由で環境変数を送信する方法 がありますが、通常、サーバー構成では無効になっています。 PermitUserEnvironment
ディレクティブが server configuration で有効になっていて、各ユーザーが独自のキーペアを持っている場合(そう、あなたはそれほど幸運ではないかもしれません)、environment="PS1=…"
をキーに対応する~/.ssh/authorized_keys
の行。
共有ユーザーアカウントで独自の設定を保持したい場合は、独自の設定ファイルディレクトリを作成し、そのディレクトリを指すようにHOME
環境変数を設定できます。
ssh targethost mkdir mrstatic.home
scp .bashrc targethost:mrstatic.home/
他のユーザーとファイルを共有する場合は、mrstatic.home
ディレクトリにシンボリックリンクを作成し、親ディレクトリの対応するエントリを指すようにします。
次に、
ssh targethost -t 'HOME=~/mrstatic.home; exec bash'`
リモート.profile
(またはその他の初期化ファイル)を変更する場合は、おそらく設定を自動化できます。多くのサイトでは、LC_*
環境変数の使用が許可されています(通常、ロケール設定に使用されます)。これらの両方の条件が満たされている場合、クライアント側で実際にロケールに使用されない変数、たとえばLC_USER
を設定し、サーバー.profile
でテストできます。
(もちろん、共有アカウントは悪い考えですが、あなたはその状況を変える立場にないかもしれません。)
ssh -t user@Host "remote='$PS1' bash -i"
次に、プロンプトで:
PS1=$remote
PS1プロンプトを〜/ .ssh/environmentに置くと、sshセッションがログインするすべてのホストにそれを運びます。 openssh 4.3p2で動作します。
クライアント側で環境変数を指定できます。ssh-serverで許可されている場合(man sshd-configを確認)、マシンにログインすると、これらの変数がセッションにコピーされます。
そのため、サーバーで.bashrcを構成して既存のPS1(または任意の変数)をチェックし、PS1がまだ設定されていない場合にのみ設定する必要があります。
または、物事をより簡単にするために、設定を関数にバンドルし、その関数を、オンデマンドのソース(source joes_bashrc
)または.bashrcに直接。独自のファイルを持つことは、もう少し堅牢に見えます。他の人々はあなたの設定を使用するかもしれませんが、そうすることを強制されません。
ログインを共有しないでください。自分と同じようにSSHを実行してから、Sudo -su shareduser
(-s
は「シェル」を意味します)。
ホームディレクトリをSudo
に保持します。
Defaults env_keep += "HOME"
追加のscpを必要とせずにそれをしたい場合は、次のようなことができます:
ssh -t srvname ' cp ~/.bashrc ~/.bashrc.n &>/dev/null ; echo "LS_COLORS=\"no=00:fi=00:ETC:ETC:ETC\";" >> ~/.bashrc.n ; echo "export LS_COLORS" >> ~/.bashrc.n ; echo "alias ls=\"ls --color=auto\";" >> ~/.bashrc.n ; exec bash --rcfile ~/.bashrc.n'
これにより、サーバーbashrcに基づくがオーバーライドを含む.bashrc.nが生成されます。
最も簡単な方法はIMHOです。
ssh user@server 'Prompt_COMMAND=export PS1="changeme $" bash -li;'
あなたが同僚にいつの間にか侵入する意思があり、あなたの好みを妨げないように彼らを信頼できるなら、私は cYrusの答え 、 akiraの答え と デニス・ウィリアムソンの答え 。
~/.bashrc
を編集して追加しますif ["$ Unf" = 1]#Unfundednut の特別なコード PS1 = "(希望するプロンプト) " (その他の必要なカスタマイズ) fi最後に。同僚は「基本プロファイルを上書きすることに感謝することはないでしょう」が、それを探しに行かない限り、これを認識しません。
ssh -tuser@Host "Unf = 1 bash -i"おそらくローカルアカウントのエイリアスまたはシェル関数に入れたいと思いますが、それは他のどの回答よりも短いので、手動で入力するだけで十分です。
これはかなり明確だと思いますが、ssh
コマンドを使用すると、リモートサーバーにログインすると、Unf
変数がリモートサーバーに設定されます。これにより、リモート.bashrc
でコードが呼び出され、カスタマイズが有効になります。コードは.bashrc
の最後に配置するため、ファイル内の以前の一般的な設定は上書きされます。
開示:これはテストしていません。