ユーザーが/bin/bash
のシェルとして/etc/passwd
を持っていると仮定します。次に、ssh user@Host command
はBashを使用してコマンドを実行します。ただし、そのシェルはログインでもインタラクティブでもありません。つまり、~/.bash_profile
も~/.bashrc
も供給されません。その場合、実行可能ファイルを見つけて実行できるようにPATH
環境変数を設定する方法は?実際のコマンドの前にsource ~/.bashrc
を付けることをお勧めしますか?
あなたにはいくつかの可能性があります:
PATH
を~/.ssh/environment
に設定します(PermitUserEnvironment yes
のsshd_config
で有効にする必要があります)。.bashrc
:コマンドの前に. ~/.bashrc
(またはsource
)を付けますそれは、ユースケースに大きく依存します。
local設定をremote設定と同一視しています。
ローカルでは、bashインスタンス、現在実行中のシェルで記述します。
ssh user@Host command
コマンドssh(それ以上)をクライアントsshとして実行します。
これを行うには、localシェルがサブシェルまたは新しいシェルを起動するか、ログインするためにnotが必要です。
コマンドは、ls
コマンドとしてローカルで実行されます。
remoteシステムへのネットワーク接続を開くのはクライアントのsshコマンドであり、正しく認証された場合はnew Shell sshの引数として記述されたコマンドの実行を開始するか、引数が指定されていない場合は、その接続でさらにコマンドが実行されることを期待します。
その新しいRemoteシェルは、ログインするために認証される必要がある(そのシステムへの)リモートユーザーとしてログインシェルになります。または、特定のコマンドが指定されている場合は、認証されたユーザー権限でそのようなコマンドを実行するだけです。
各ファイルの先頭に$file sourced
を追加することで、どのファイルがソースであるかを確認できます(remoteシステム内)(/etc/
ファイルを変更するにはルートが必要です):
$ a=(~/.bashrc ~/.profile /etc/bash.bashrc /etc/profile)
$ for f in "${a[@]}"; do sed -i '1 i\echo "'"$f"' was read"\n' "$f"; done
次に、sshコンソールを起動します。
$ ssh sorontar@localhost
/etc/profile was read
/etc/bash.bashrc was read
/home/sorontar/.profile was read
/home/sorontar/.bashrc was read
この場合、両方のbashrc
ファイルが読み込まれたのは、各profile
ファイルにそれらを含めるためのコマンドが含まれていたためであり、ログインシェルが直接ファイルを提供したためではありません。
$ ssh sorontar@localhost :
/etc/bash.bashrc was read
/home/sorontar/.bashrc was read
このシステムでは、どちらの場合もbashrc
が読み取られます。
実行するコマンドにsource ~/.bashrc
を追加する必要はありません。
このシステムでシェルを起動するすべてのユーザーの/etc/bash.bashrc
に "$ PATH"を変更するための正しい設定を含めるだけです。または、それを必要とするユーザーごとに~/.bashrc
で。ユーザーのスケルトン.bashrc
を/etc/skel/
に追加(または編集)して、新しいユーザーを作成し、正しいファイルを利用できるようにすることができます。
上記はbashにのみ有効です。すべてのシェルで機能する設定が必要な場合は、環境変数PATHを、それを必要とするユーザーごとにsshファイル~/.ssh/environment
を使用して設定するとよいでしょう。または、sshサーバーが実行されているシステムのグローバル設定に/etc/ssh/sshrc
を使用します(詳細については、man sshd
のファイルセクションをお読みください)。