ssh가 ~/.ssh를 생성하려는 시도를 어떻게 중지합니까?

ssh가 ~/.ssh를 생성하려는 시도를 어떻게 중지합니까?

FreeNAS 시스템용 rsync 기반 백업을 개발 중입니다.

백업 프로세스의 일부에는 백업 저장소 역할을 하는 원격 시스템에 로그인하는 작업이 포함됩니다. 이 작업을 수행할 때마다 메시지가 표시됩니다.

Could not create directory '/root/.ssh'.

/root수동으로 생성 하려고 하면 다음과 같은 메시지가 ~/.ssh수신되기 때문에 이는 읽기 전용이기 때문이라고 가정합니다 .

mkdir: /root/.ssh: Read-only file system

따라서 known_hosts이 파일을 나에게 더 적합한 백업 프로세스로 옮겼으며 -o UserKnownHostsFile이와 관련된 모든 문제를 해결하는 데 사용될 것입니다.

그러나 내가 호출할 때 ssh여전히 폴더를 생성하려고 시도합니다 . ~/.ssh폴더 생성을 시도하지 않게 하려면 어떻게 해야 합니까?

답변1

여기에 언급된 솔루션은 괜찮지만 ~/.ssh가 존재하지 않거나 이를 생성할 필요가 없는 솔루션을 찾고 있습니다(Windows에서 실행하고 MSYS 기반 ssh.exe를 배포하지만 그렇지 않은 경우). MSYS/ Cygwin 머신 설치).

불행하게도 UserKnownHostsFile이 루틴은 사용자가 어떤 값을 제공하든 상관없이 소스 코드에 하드코딩되어 있는 것 같습니다.

    r = snprintf(buf, sizeof buf, "%s%s%s", pw->pw_dir,
        strcmp(pw->pw_dir, "/") ? "/" : "", _PATH_SSH_USER_DIR);
    if (r > 0 && (size_t)r < sizeof(buf) && stat(buf, &st) < 0) {
#ifdef WITH_SELINUX
        ssh_selinux_setfscreatecon(buf);
#endif
        if (mkdir(buf, 0700) < 0)
            error("Could not create directory '%.200s'.",
                buf);
#ifdef WITH_SELINUX
        ssh_selinux_setfscreatecon(NULL);
#endif
    }

그러나 흥미롭게도 $HOME홈 디렉토리를 결정하기 위해 환경 변수를 확장하려고 시도합니다. 버퍼가 약 256바이트이므로 실제로 버퍼를 오버플로하여(HOME을 256바이트보다 긴 문자열로 정의) if 조건을 우회할 수 있습니다. 예를 들면 다음과 같습니다.

export HOME=$HOME/././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././.

답변2

루트 파일 시스템을 읽기-쓰기로 임시로 다시 마운트하고 ssh 위치에 대한 .ssh용 심볼릭 링크를 생성합니다.할 수 있는쓰다. 이렇게 하면 지루한 추가 단계를 수행할 필요 없이 SSH 키를 추가하거나 향후 새로운 알려진 호스트를 허용하는 등의 작업을 수행할 수도 있습니다. 그리고-o UserKnownHostsFile동시에 선택을 포기할 수도 있습니다.

관련 정보