〜/ .profileはSSHの使用時にロードされません(Ubuntu)


22

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

Capistranoを介して展開できるように、Ruby環境をセットアップする必要があります。

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

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

Ubuntu 12.04を実行しています。


元の質問は:

localhostの別のアカウントにsshすると、.profileが読み込まれません。どうすればsshにそれをロードさせることができますか?Ubuntu 12.04を実行しています。

回答:


15

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

 ssh user@host bash --login -i 

(または〜。/ bash_profile)およびssh の「ロール」には他のファイルがいくつかあります(詳細については以下を参照してください)。~/.profile.bashrcman ssh

〜/ .ssh / environment

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

〜/ .ssh / rc

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


sshは他のツール(継続的な配信)によって実行されており、コマンドを簡単に変更できないため、「You may」はしばしば真実ではありません。
Jan Hudec

6

.profilesshセッションではないログインシェルに対してのみロードされます(デフォルト)。すべての対話型シェルの起動時に何かを実行する場合は、.bashrc代わりに(または.zshrcシェルが使用するものを)入れます。

また、ローカルマシンの別のアカウントにログインしたいだけの場合、sshはおそらく過剰です。su代わりに何かを使いたいかもしれません。


3
.bashrcどちらもロードされていないようです。
ケノーブ14年

これは間違っています。これは、あるログインシェル。マニュアルページから:「コマンドが指定されている場合、コマンドはログインシェルではなくリモートホストで実行されます。」
mkj

〜/ .zshenvは私のために機能します。unix.stackexchange.com/questions/4921/sh-startup-files-over-ssh
user91155

sshに実行コマンドが与えられると、デフォルトでttyを割り当てないようになり、シェルも「インタラクティブ」ではなくなります。
Jan Hudec

4

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、私は次のようにレイアウトをしました(置き換えENVBASH_ENVはbashを使用した場合):


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


0

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.