私はOpenSSH Serverの設定を見つけました~/.ssh/environment
。PermitUserEnvironment
変数をリテラル文字列に設定するのに便利です。たとえば、
# 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
変数を拡張するかどうかについては、このトピックを扱うさまざまな質問が見つかりました。しなければならない働くかどうか:
PATH="$PATH:/new/path"
「私が見つけたのは、拡張する必要がある~/.ssh/environment
ときに行を追加したため、拡張されなかったことですPATH=$PATH:/new/path
。」- 「二重引用符、変数拡張、エイリアス定義があります。どちらも機能しません。」
- 「
~/.ssh/environment
シェルまたはコマンドが生成される前に読みますssh
。したがって(たとえば、エクスポートも$ 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
したがって、文書やコードを使用してはいけません。