SSH 구성 파일에서 변수를 사용하는 방법

SSH 구성 파일에서 변수를 사용하는 방법

SSH 구성 파일을 $HOME대체하는 데 사용하고 싶습니다./Users/Me

Host MyHost
    HostName 192.168.1.1
    IdentitiesOnly yes
    User me
    IdentityFile "/Users/Me/.ssh/id_rsa"

하지만 난 얻었어no such identity: $HOME/.ssh/id_rsa: No such file or directory

답변1

적어도 내 Debian 10 시스템에서는 ssh_config(5)매뉴얼 페이지에 다음과 같이 나와 있습니다.

논쟁신분증물결표 구문을 사용하여 사용자의 홈 디렉터리나 TOKENS 섹션에 설명된 토큰을 참조할 수 있습니다.

따라서 다음과 같이 줄을 작성할 $HOME수 있습니다 .IdentityFile

IdentityFile "~/.ssh/id_rsa"

또는 다음과 같이:

IdentityFile "%d/.ssh/id_rsa"

환경 변수 구문( ${HOME}) 지원은 구성 항목에서만 언급되고 IdentityAgent에서는 언급되지 않습니다 IdentityFile.OpenSSH 릴리스 노트CertificateFile환경 변수 구문 지원 및 구성 키워드가 OpenSSH 버전 8.4(2020-09-27에 릴리스됨)에 추가되었습니다 ControlPath. IdentityFileDebian 10에는 버전 7.9만 있습니다(최신 보안 수정 사항으로 백포트됨).

따라서 이 글을 쓰는 시점에서 매우 새로운 Linux 배포판을 사용하지 않는 한 OpenSSH 버전은 ${HOME}SSH 구성 파일의 구문 사용을 지원하기에는 너무 오래되었을 수 있습니다.

답변2

SSH 구성 파일의 일부 키워드는 환경 변수를 지원하지만 대부분은 지원하지 않습니다. 다행히 IndentyFile은 그 중 하나입니다.

파일에서 ${HOME}대신 사용해야 합니다 .$HOME

tokens예를 들어 를 사용하여 홈 디렉토리를 참조할 수도 있습니다 %d. 이것은 에 의해 문서화되었습니다 man ssh_config.

답변3

-F추가하려면 ssh 옵션(사용자 정의 구성 파일)을 사용하여 두 가지 작업을 더 수행할 수 있습니다. 특히 이러한 변수는 오래되었지만 널리 사용되는 CentOS 7에서는 작동하지 않기 때문입니다. 이는 노드에 홈 디렉터리가 없을 때 중요합니다(그러나 $HOME은 존재하지 않는 위치를 가리킵니다). 예를 들어 HTCondor 클러스터에서 $_CONDOR_SCRATCH_DIR은 $HOME이 아니라 사용자의 집입니다. 등.

파일 경로는 상대 경로일 수 있으므로 cd원하는 디렉터리로 이동하여 상대 경로를 사용하세요.

ssh -F relative_ssh.config servername

두 번째는 활용 범위를 확대하는 것입니다.envsubst

FOO=1 BAR=2 envsubst < in_file > out_file

그러나 많은 Singularity 컨테이너와 마찬가지로 이 명령은 ssh간단한 시스템( yum/apt-get install utils-linux또는 yum/apt-get updateSingularity 빌드)에는 존재하지 않습니다.

마지막으로 PSA는 SSH 키와 구성을 원격 서버/클러스터/컴퓨터에 저장하는 것은 위험합니다. 볼륨이 마운트된 컴퓨터에서 누구도 sudo 권한을 갖고 있지 않다고 100% 확신하지 않는 한 공유 공간에 두지 마십시오. OBfuScAt1on이 도움이 될 수 있지만(예: 아무도 이름이 지정된 폴더를 보지 않음) 실제로는 (베어본에 존재) crash-dump-Aug23타르볼을 암호화하는 데 사용됩니다.openssl

관련 정보