.ssh/environment: 変数拡張 (PATH=...:$PATH) が機能する必要がありますか?

.ssh/environment: 変数拡張 (PATH=...:$PATH) が機能する必要がありますか?

私はOpenSSH Serverの設定を見つけました~/.ssh/environmentPermitUserEnvironment変数をリテラル文字列に設定するのに便利です。たとえば、

# host ~/.ssh/environment
PATH=/home/rlue/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
# client
$ ssh host 'echo $PATH'
/home/rlue/.local/bin:/usr/local/bin:/usr/bin:/bin:/usr/games

ただし、変数拡張は機能しません。

# host ~/.ssh/environment
PATH=/home/rlue/.local/bin:$PATH
# client
$ ssh host 'echo $PATH'
/home/rlue/.local/bin:$PATH

変数を拡張するかどうかについては、このトピックを扱うさまざまな質問が見つかりました。しなければならない働くかどうか:

以前の投稿の著者は、私が実行しているOpenSSHサーバーと同じバージョン(Debian Stableバージョンの1:7.9p1-10 + deb10u2)を使用できることを確認しましたが、彼の指示に正確に従い、まだエラーが発生します。テキスト$PATH(つまり、変数拡張なし)。

誰もが明確な答えを持っていますか?しなければならない動作している場合、私の設定に何がありましたか?

ベストアンサー1

ソースコードを見ると、関連する機能は次のとおりです。read_environment_file()存在するsession.cそしてchild_set_env()存在するmisc.c。これは単純な関数です。フォームの行を読み、var=value設定し、制限と有効性を確認するだけです。ただし、値の追加処理は行われません。これもマンページ説明する:

また、ファイルが存在し、ユーザーが環境を変更することを許可されている場合、sshは~/.ssh/environment""形式の行を読み取り、環境に追加します。VARNAME=value

したがって、文書やコードを使用してはいけません。

おすすめ記事