su를 통해 로그인한 후 사용자에게 환경 변수 내보내기

su를 통해 로그인한 후 사용자에게 환경 변수 내보내기

다음 별칭이 정확히 무엇을 하는지 알아내려고 노력 중입니다. COUNTER사용자가 환경 변수를 사용할 수 있도록 하는 nobody것 같지만 ssh를 사용하면 COUNTER=${COUNTER}앞에서 SendEnv COUNTER당황하게 됩니다 . 매뉴얼 페이지를 확인했지만 아무것도 모릅니다.

COUNTER=280
...
alias run='COUNTER=${COUNTER} ssh nobody@localhost -o "SendEnv COUNTER"'

SSH 없이 이 별칭을 다시 작성하고 싶습니다(비활성화되었기 때문에). 제가 시도한 내용은 다음과 같습니다. 하지만 원래 별칭의 기능을 정확히 이해하지 못하면 제가 하고 있는 일이 올바른지 확신할 수 없습니다.

alias run='su - nobody -c "export COUNTER=${COUNTER}"'

답변1

  1. 프로그램이 실행되기 전에 같은 줄/같은 문에 있는 변수에 값을 할당합니다.일시적으로실행 중인 프로그램의 환경으로 변수를 내보냅니다. 이는 변수를 내보내는 한 가지 방법입니다.단 하나의 프로그램- 프로그램이 실행되면 해당 프로그램은 더 이상 환경에 존재하지 않으며 후속 프로그램에 영향을 주거나 사용할 수 없습니다.

    COUNTER=${COUNTER} ssh ...$COUNTER를 자체적으로 설정하고 임시로 환경으로 내보낸 후 ssh.

    중괄호나 따옴표 COUNTER=$COUNTER는 100% 동일하므로 그 목적을 이해하지 못하는 사람이 작성한 것일 수 있으며, COUNTER="$COUNTER"원하지 않는다고 확신하지 않는 한 큰 따옴표로 묶인 변수가 좋은 습관이기 때문에 더 나을 것입니다. 이 특별한 경우에 왜 이 작업을 수행하고 싶지 않은지 모르겠습니다. 바라보다$VAR 대 ${VAR} 및 인용 여부

  2. -o "SendEnv COUNTER"원격 서버로 전송해야 하는 로컬 환경 변수를 ssh알려주는 옵션 입니다 . ssh기본적으로는 TERM전송만 됩니다(그리고 원격 셸/프로그램을 입력하고 해당 출력을 볼 수 있는 대화형 SSH 연결과 같이 aa pty가 요청되는 경우에만). 에서 man ssh_config:

    SendEnv

    environ(7)서버로 보내야 하는 지역 변수를 지정합니다 . 서버도 이를 지원해야 하며 서버는 이러한 환경 변수를 허용하도록 구성되어야 합니다. TERM의사 터미널이 요청될 때마다 환경 변수는 항상 프로토콜의 요구에 따라 전송됩니다 . 서버 구성 방법에 대한 자세한 내용은 을 참조하십시오 AcceptEnv. sshd_config(5)변수는 와일드카드 문자를 포함할 수 있는 이름으로 지정됩니다. 여러 환경 변수는 공백으로 구분하거나 여러 SendEnv지시어에 분산시킬 수 있습니다.

    패턴에 대한 자세한 내용은 패턴을 참조하세요.

    이전에 설정된 SendEnv 변수 이름은 패턴 접두사를 추가하여 지울 수 있습니다 -. 기본적으로 환경 변수는 전송되지 않습니다.

    원격 서버는 전송된 변수를 허용하도록 구성되지 않은 한 전송된 모든 변수를 무시할 수 있으며 무시할 것입니다. 기본적으로 TERM.from 만 허용됩니다 man sshd_config.

    AcceptEnv

    클라이언트가 보낸 환경 변수가 세션에 복사되도록 지정합니다 environ(7). 클라이언트 구성 방법을 알아보려면 SendEnvSetEnv를 참조하세요. 클라이언트가 의사 터미널을 요청할 때마다 환경 변수는 프로토콜에서 필요하기 때문에 항상 허용됩니다.ssh_config(5)TERM

    변수는 이름으로 지정되며 와일드카드 문자 *?. 여러 환경 변수는 공백으로 구분하거나 여러 AcceptEnv 지시문에 배포할 수 있습니다. 특정 환경 변수는 제한된 사용자 환경을 우회하는 데 사용될 수 있습니다. 따라서 이 지시문을 사용할 때는 주의해야 합니다. 기본적으로 환경 변수는 허용되지 않습니다.

    /etc/ssh/sshd_config, 원격 서버(실제로는 localhost의미 COUNTER=${COUNTER} ssh nobody@localhost -o "SendEnv COUNTER"입니다 .ssh nobody@localhost

  3. su - nobody -c "export COUNTER=${COUNTER}export COUNTER=${COUNTER}사용자 None으로 실행한 다음 종료합니다(옵션이 명령을 실행하도록 지시하기 때문 입니다 ) -c.su바꾸다단지 쉘을 제공하기만 하면 쉘을 제공할 때까지 실행되지 않습니다.) 시도 COUNTER="$COUNTER" su - nobody해봐. 아니면 export COUNTER실행하는 모든 프로그램의 환경에 두십시오.

관련 정보