web-dev-qa-db-ja.com

PS1プロンプトをSSH経由でプッシュする

私は特定の「PS1」プロンプトを使用しています。いくつかのログインをいくつかの異なるサーバー上の他のユーザーと共有します。ローカルのbashプロファイルでリモートプロンプトを指定する方法があるのか​​、それともリモートでアクセスするたびにコピーして貼り付ける以外の方法があるのか​​と思いました。

19
Unfundednut

各リモートマシンにファイルをアップロードします。たとえば、~/.my_custom_bashrcをカスタムbash構成で(この場合はPS1=...で)アップロードし、sshを次のコマンドで起動します。

ssh user@Host -t "bash --rcfile ~/.my_custom_bashrc -i"

読みやすくするためのラッパーとして、bash関数を簡単に使用できます。

17
cYrus

PS1変数を送信するだけで、'(一重引用符)が含まれていない場合は、以下を試してください。

ssh targethost -t "PS1='$PS1'; exec bash"

ローカルの.bashrcPS1を上書きする可能性があります(これを指摘してくれた 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で動作します。

2
Valmik

クライアント側で環境変数を指定できます。ssh-serverで許可されている場合(man sshd-configを確認)、マシンにログインすると、これらの変数がセッションにコピーされます。

そのため、サーバーで.bashrcを構成して既存のPS1(または任意の変数)をチェックし、PS1がまだ設定されていない場合にのみ設定する必要があります。

または、物事をより簡単にするために、設定を関数にバンドルし、その関数を、オンデマンドのソース(source joes_bashrc)または.bashrcに直接。独自のファイルを持つことは、もう少し堅牢に見えます。他の人々はあなたの設定を使用するかもしれませんが、そうすることを強制されません。

1
akira

ログインを共有しないでください。自分と同じようにSSHを実行してから、Sudo -su shareduser-sは「シェル」を意味します)。

ホームディレクトリをSudoに保持します。

Defaults env_keep += "HOME"
1
user1686

追加の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が生成されます。

1
neuron

最も簡単な方法はIMHOです。

ssh user@server 'Prompt_COMMAND=export PS1="changeme $" bash -li;'
0
Matias Barrios

あなたが同僚にいつの間にか侵入する意思があり、あなたの好みを妨げないように彼らを信頼できるなら、私は cYrusの答えakiraの答えデニス・ウィリアムソンの答え

  1. 各サーバーで、~/.bashrcを編集して追加します
    if ["$ Unf" = 1]#Unfundednut 
    の特別なコード
     PS1 = "(希望するプロンプト) "
    (その他の必要なカスタマイズ)
     fi
    最後に。同僚は「基本プロファイルを上書きすることに感謝することはないでしょう」が、それを探しに行かない限り、これを認識しません。
  2. リモートサーバーにログインするときは、を実行します。
    ssh -tuser@Host "Unf = 1 bash -i"
    おそらくローカルアカウントのエイリアスまたはシェル関数に入れたいと思いますが、それは他のどの回答よりも短いので、手動で入力するだけで十分です。

これはかなり明確だと思いますが、sshコマンドを使用すると、リモートサーバーにログインすると、Unf変数がリモートサーバーに設定されます。これにより、リモート.bashrcでコードが呼び出され、カスタマイズが有効になります。コードは.bashrcの最後に配置するため、ファイル内の以前の一般的な設定は上書きされます。

開示:これはテストしていません。

0
Scott