저는 임베디드 보드를 개발 중이며 보드에 액세스하려면 원활하게 작동하려면 SSH가 필요합니다. 현재 디버깅 목적으로 직렬 연결을 사용하여 보드에 액세스합니다.
이제 openssh를 시작하려고 하면 다음 오류가 발생합니다.
/usr/sbin/sshd: /lib/libcrypt.so.1: version `XCRYPT_2.0' not found (required by /usr/sbin/sshd)
/usr/lib/libcrypt.so.1에 "XCRYPT_2.0"을 제공하는 올바른 libcrypt.so.1이 있습니다.
이것이 내가 한 일입니다:
rm /lib/libcrypt.so.1
ln -s /usr/lib/libcrypt.so.1 /lib/libcrypt.so.1
SSH를 작동시킬 수 있습니다. 그러나 /lib/libcrypt.so.1을 삭제해야 한다는 사실을 발견했습니다. 이 공유 개체가 존재하지 않으면 pam_unix.so/some 다른 공유 개체가 문제를 일으키는 것이라고 생각합니다. 직렬 로그인(다음 재부팅)을 해도 마더보드에 로그인할 수 없기 때문입니다.
"로그인" 프롬프트도 표시되지 않습니다.
내 질문은 sshd에 공유 객체 경로를 동적으로 제공하는 방법이 있습니까?
/etc/init.d/sshd <동적으로 공유 객체 경로 제공> start
또는
/usr/sbin/sshd <동적으로 공유 객체 경로 제공> start
이 시스템에 대한 추가 정보:
openssh 7.8/7.8p1 버전 사용
루트 파일 시스템을 얻으려면 Yocto Thud(2.6)를 사용하십시오.
리눅스 4.14 실행
답변1
환경 변수를 사용하여 공유 라이브러리가 검색되는 디렉터리를 설정할 수 있습니다 LD_LIBRARY_PATH
.
libcrypt.so.1을 /etc/ssh/libs/에 복사하고(물론 먼저 디렉터리를 생성한 후) sshd를 시작합니다.
env LD_LIBRARY_PATH=/etc/ssh/libs /usr/sbin/sshd
sshd에 전달된 모든 매개변수는 여전히 호출의 첫 번째 경로에 전달되어야 합니다.
답변2
저도 같은 문제가 있었는데 Yocto 버전 변경으로 인해 이전 버전에서는 libcrypto.so.1을 glibc의 일부로 설치했는데 이제는 libcrypto-....rpm이라는 패키지로 되어 있어서 /를 삭제하면 / lib/libcrypto*, ssh가 /usr/lib 아래의 항목을 재사용하도록 강제합니다.