回答:
PS1
変数を送信したいだけで、'
(単一引用符)が含まれていない場合は、次を試してください:
ssh targethost -t "PS1='$PS1'; exec bash"
ただし、ローカル.bashrc
は上書きする可能性がありますPS1
(これを指摘してくれたDennis Williamsonに感謝します)。
sshを介して環境変数を送信する方法がありますが、通常はサーバー構成で無効になっています。場合PermitUserEnvironment
ディレクティブがで有効になっているサーバーの構成および各ユーザーが(ええ、あなたはとても幸運ではないかもしれません)、自分の鍵ペアを持っている、あなたは追加することができ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
シェルの起動中に上書きされることは珍しくありません。役員なし:私のシステムでのテスト中、それは何の違いももたらさないようでした-追加のプロセスはありません。
.bashrc
が上書きする可能性が高いPS1
です。
クライアント側で環境変数を指定できます。ssh-serverで許可されている場合(man sshd-configを確認)、マシンにログインするときにこれらの変数がセッションにコピーされます。
そのため、既存のPS1(または任意の変数)をチェックし、PS1がまだ設定されていない場合にのみ設定するように、サーバーで.bashrcを構成する必要があります。
または、簡単にするために、設定を関数にバンドルし、その関数をオンデマンドのソースとして特殊ファイルとしてデプロイする(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が生成されます。
あなたがあなたの同僚にいつの間にか侵入し喜んでいる、そして、あなたの好みに干渉しないようにそれらを信頼することができた場合は、その後、私はの組み合わせ示唆サイラスの答え、 アキラの答えとデニスウィリアムソンの答えを。
~/.bashrc
して追加しますif ["$ Unf" = 1]#Unfundednutの特別なコード それから PS1 = " (希望するプロンプト) " (必要なその他のカスタマイズ) fi最後に。あなたの同僚は「基本プロファイルに上書きすることを感謝しません」が、彼らはそれを探しに行かない限り、これに気付かないでしょう。
ssh -t user @ host "Unf = 1 bash -i"ローカルアカウントのエイリアスまたはシェル関数に入れたいと思うかもしれませんが、それは十分に短く、他のどの回答よりも短いので、簡単に手動で入力できます。
これはかなり明確だと思いますが、ssh
コマンドをUnf
実行すると、リモートサーバーにログインすると変数が設定されます。これにより、リモート.bashrc
でコードが呼び出され、カスタマイズが有効になります。コードをの最後に配置するため.bashrc
、ファイルの前の一般的な設定が上書きされます。
開示:これはテストしていません。
最も簡単な方法は私見です:
ssh user@server 'PROMPT_COMMAND=export PS1="changeme $" bash -li;'
PROMPT_COMMAND
(シェルがプロンプトを出すたびに実行される)は、この問題を解決する非常に手間のかかる方法のようです。そして、それはやや不可解であるため、実際にそれを示唆する回答には、それがどのように機能するかの説明が必要です。
sshfs / nfsを介してホームをマウントするようなこともできますが、最も簡単な解決策は、bashrcを新しいマシンにscpすることです。これはエイリアスやものももたらします。
"PS1='$PS1' bash -i"
はなくexec
、なぜですか(そして、なぜそうではないのですか)?