sshコマンドの実行時にPATHを設定する方法は?


18

ユーザーが/bin/bashでシェルを持っていると仮定します/etc/passwd。次にssh user@host command、Bashを使用してコマンドを実行します。ただし、そのシェルはログインでもインタラクティブでもあり~/.bash_profileません~/.bashrc。つまり、ソースでもありません。その場合PATH、実行可能ファイルを見つけて実行できるように環境変数を設定する方法は?実際のコマンドの前に接頭辞を付けることをお勧めしますsource ~/.bashrcか?


5
.bashrcソースされていますが、おそらく上部にインタラクティブ機能のテストがあります。そのチェックの前に置いたものが適用されるはず~/.pam_environmentです。サーバーがユーザー環境または使用を許可していないときにPATHを強制するために私はそれを行います。
ムル16

回答:


18

可能性はほとんどありません。

  • 設定するPATHには、サーバー上の~/.ssh/environment(ニーズによって有効にすることPermitUserEnvironment yessshd_config)。
  • バイナリへのフルパスを使用
  • 前述のように、手動でsource .bashrc:コマンドの前に. ~/.bashrc(またはsource)を付けます

それは、ユースケース、どちらに進むかによります。


6
手動での調達~/.bashrcは不要であり、デフォルトで行われます。実際、それは悪い考えのように思えます。
sorontar

$PATHはから~/.ssh/environmentではなく、少なくともからではありませんOpenSSH_7.9p1, OpenSSL 1.1.1b 26 Feb 2019
Jaakko

1
@Jaakko sshd_configでPermitUserEnvironment(最近のバージョンのデフォルト)を使用しておそらく無効になっています
-Jakuje

私はそれを理解しました、それが拡張されるべきではなかったときPATH="$PATH:/new/path"、私~/.ssh/environmentはそれが必要だったときに行を追加したので拡大していませんでしたPATH=$PATH:/new/path
Jaakko

4

ローカル設定をリモート設定と同一視しています。

ローカルでは、bashインスタンス、あなたが書いている現在実行中のシェル:

ssh user@host command

コマンドssh(これ以上)をクライアントsshとして実行します。
これを行うために、ローカルシェルはサブシェルまたは新しいシェルまたはログインを開始する必要はありません

コマンドは次のように実行されlsます:ローカル。

リモートシステムへのネットワーク接続を開くのはクライアントsshコマンドであり、正しく認証された場合、新しいシェルが開始されてsshへの引数として記述されたコマンドが実行されます。その接続で。

(そのシステムに対する)リモートユーザーはログインするために認証される必要があるので、その新しいリモートシェルは必然的にログインシェルになります。または、特定のコマンドが指定されている場合は、認証されたユーザー権限でそのようなコマンドを実行するだけです。

$file sourcedリモートシステム内の)各ファイルの先頭にa を追加することにより、どのファイルがソースされているかを確認できます(/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にのみ有効です。すべてのシェルで機能する設定が必要な場合は、おそらく~/.ssh/environmentそれを必要とする各ユーザーのsshファイルを使用して環境変数PATHを設定します。または/etc/ssh/sshrc、sshサーバーが実行されているシステムのグローバル設定に使用します(詳細については、「ファイル」セクションをお読みくださいman sshd)。

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