web-dev-qa-db-ja.com

〜/ .profileは、SSHを使用するときにロードされません(Ubuntu)

私が本当に解決したかった問題を反映するように編集:

Ruby環境をセットアップして、Capistrano経由でデプロイできるようにする必要があります。

export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"

これらを〜deploy/.profileに入れましたが、sshを実行しても実行されていません。アイデア?

Ubuntu 12.04を実行しています。


元の質問は:

localhostで別のアカウントにsshを実行すると、.profileが読み込まれません。sshに強制的に読み込ませるにはどうすればよいですか?Ubuntu 12.04を実行しています。

22
Charles R

対話型ログインシェルを開始することを明示的に指定できます。

 ssh user@Host bash --login -i 

"role" of ~/.profile(または〜。/ bash_profile)および.bashrc for sshには他のファイルがいくつかあります(man ssh 詳細については):

〜/ .ssh/environment

環境変数の追加定義が含まれています。上記の環境を参照してください。

〜/ .ssh/rc

このファイル内のコマンドは、ユーザーのログイン時に、ユーザーのシェル(またはコマンド)が起動する直前にsshによって実行されます。詳細については、sshd(8)のマニュアルページを参照してください。

15
user86064

.profileはログインシェルに対してのみロードされ、sshセッションは(デフォルトでは)ロードされません。すべてのインタラクティブシェルの起動時に何かを実行したい場合は、.bashrc代わりに(または.zshrcまたはシェルが使用するものすべて)。

また、ローカルマシンの別のアカウントにログインしたいだけの場合、sshはおそらくやりすぎです。代わりにsuまたは何かを使用したい場合があります。

6
qmega

Bashを使用すると、~/.bashrcが読み取られます。以下は、kshとsh(shモードではbash)、または~/.bashrcがログイン中に実行されない場合に役立ちます。

Sshdは~/.ssh/environment(権限についてはsshd_config(5)を確認)および~/.ssh/sshrcまたは~/.ssh/rcを調べます。これにより、ENV=~/.profileまたはBASH_ENV=~/.profileSSH_LOGIN=Yをセットアップできるようになります

~/.profileでは、次のレイアウトになっています(bashを使用する場合は、ENVBASH_ENVに置き換えてください)。


if [[ -n $SSH_LOGIN || -z $ENV ]]; then
     # Put here login initialization code
     unset SSH_LOGIN
     ENV=~/.profile
fi
 # Put here code thats get executed with each ksh/sh invocation
4
eremmel

おそらく~/.bash_profileがあり、~/.profileをオーバーライドしています。

1
user541686

Bashは、ログインシェルの場合にのみ~/.profileを読み取り、ターミナルがある場合にのみ~/.bash.bashrcを読み取ります。sshを使用してコマンドを呼び出す場合、デフォルトではどちらもtrueになりません。ただし、サーバーに環境を設定するオプションは他にもいくつかありますが、すべて残念ながらシステムのセットアップによって異なります。

  • この場合でも、Zshは~/.zshenvを読み取ります。ただし、bashに対応する構成ファイルはありません。
  • PermitUserEnvironmentオプションが/etc/sshd_configでオンの場合、sshは~/.ssh/environmentを読み取ります。残念ながら、このオプションはデフォルトでオフになっています。
  • pam_env.souser_readenv=1/etc/pam.d/sshdで呼び出された場合、~/.pam_environmentが読み取られます。これはモジュールのデフォルトではありませんが、少なくともUbuntuではそのように呼ばれていますです。
  • 他のすべてが失敗した場合、環境を設定し、最後にcommand=を実行するラッパースクリプトを呼び出す$SSH_ORIGINAL_COMMANDディレクティブを承認済みのキーファイルに置くことができます(コマンドはシェル用なので、evalここでは適切ですが、わかりません)。
0
Jan Hudec