私が本当に解決したかった問題を反映するように編集:
Ruby環境をセットアップして、Capistrano経由でデプロイできるようにする必要があります。
export PATH=$HOME/.rbenv/bin:$PATH
eval "$(rbenv init -)"
これらを〜deploy/.profileに入れましたが、sshを実行しても実行されていません。アイデア?
Ubuntu 12.04を実行しています。
元の質問は:
localhostで別のアカウントにsshを実行すると、.profileが読み込まれません。sshに強制的に読み込ませるにはどうすればよいですか?Ubuntu 12.04を実行しています。
対話型ログインシェルを開始することを明示的に指定できます。
ssh user@Host bash --login -i
"role" of ~/.profile
(または〜。/ bash_profile)および.bashrc
for sshには他のファイルがいくつかあります(man ssh
詳細については):
〜/ .ssh/environment
環境変数の追加定義が含まれています。上記の環境を参照してください。
〜/ .ssh/rc
このファイル内のコマンドは、ユーザーのログイン時に、ユーザーのシェル(またはコマンド)が起動する直前にsshによって実行されます。詳細については、sshd(8)のマニュアルページを参照してください。
.profile
はログインシェルに対してのみロードされ、sshセッションは(デフォルトでは)ロードされません。すべてのインタラクティブシェルの起動時に何かを実行したい場合は、.bashrc
代わりに(または.zshrc
またはシェルが使用するものすべて)。
また、ローカルマシンの別のアカウントにログインしたいだけの場合、sshはおそらくやりすぎです。代わりにsu
または何かを使用したい場合があります。
Bashを使用すると、~/.bashrc
が読み取られます。以下は、kshとsh(shモードではbash)、または~/.bashrc
がログイン中に実行されない場合に役立ちます。
Sshdは~/.ssh/environment
(権限についてはsshd_config(5)を確認)および~/.ssh/sshrc
または~/.ssh/rc
を調べます。これにより、ENV=~/.profile
またはBASH_ENV=~/.profile
とSSH_LOGIN=Y
をセットアップできるようになります
~/.profile
では、次のレイアウトになっています(bashを使用する場合は、ENV
をBASH_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
おそらく~/.bash_profile
があり、~/.profile
をオーバーライドしています。
Bashは、ログインシェルの場合にのみ~/.profile
を読み取り、ターミナルがある場合にのみ~/.bash.bashrc
を読み取ります。sshを使用してコマンドを呼び出す場合、デフォルトではどちらもtrueになりません。ただし、サーバーに環境を設定するオプションは他にもいくつかありますが、すべて残念ながらシステムのセットアップによって異なります。
~/.zshenv
を読み取ります。ただし、bashに対応する構成ファイルはありません。PermitUserEnvironment
オプションが/etc/sshd_config
でオンの場合、sshは~/.ssh/environment
を読み取ります。残念ながら、このオプションはデフォルトでオフになっています。pam_env.so
がuser_readenv=1
の/etc/pam.d/sshd
で呼び出された場合、~/.pam_environment
が読み取られます。これはモジュールのデフォルトではありませんが、少なくともUbuntuではそのように呼ばれていますです。command=
を実行するラッパースクリプトを呼び出す$SSH_ORIGINAL_COMMAND
ディレクティブを承認済みのキーファイルに置くことができます(コマンドはシェル用なので、evalここでは適切ですが、わかりません)。