방금 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 안정 버전의 1:7.9p1-10+deb10u2)을 사용할 수 있음을 확인했지만 그의 지시를 정확히 따랐으며 여전히 오류가 발생합니다. 텍스트 $PATH
(즉,변수 확장 없음).
누구든지 명확한 대답을 가지고 있습니까?~해야 한다작동 중이라면 내 구성에 무엇이 빠졌습니까?
답변1
소스 코드를 보면 관련 기능은 다음과 같습니다.read_environment_file()
존재하다session.c
그리고child_set_env()
존재하다misc.c
. 이는 간단한 함수입니다. 양식의 행을 읽고 var=value
설정하고 한계와 유효성을 확인하기만 하면 됩니다. 그러나 값에 대한 추가 처리는 수행하지 않습니다. 이것은 또한맨페이지설명하다:
또한 파일이 존재하고 사용자가 환경을 변경하도록 허용된 경우 ssh는
~/.ssh/environment
" " 형식의 행을 읽고 환경에 추가합니다.VARNAME=value
따라서 문서나 코드를 통해 수행해서는 안 됩니다.