원격 컴퓨터(내장 Linux 실행)에 SSH 서버를 설치한 후 호스트 컴퓨터에서 SSH 서버에 연결하려고 시도했지만 실패했습니다.
/etc/passwd
이는 내 대상 임베디드 Linux에 사용자 계정이 없고 /etc
쓸 수 없기 때문에 ssh 서버에 연결할 때 사용자 계정을 지정할 수 없기 때문입니다(ssh 연결에는 계정 비밀번호가 필요함). 따라서 시스템에는 사용자 계정이 없습니다.
호스트 시스템에서 원격 시스템의 SSH 서버에 연결하는 다른 방법이 있습니까? 루트 사용자로 로그인하고 싶습니다.
이 질문은 이전 질문에 대한 후속 질문입니다."/etc/passwd" 없이 임베디드 Linux에서 내 계정을 어떻게 확인할 수 있나요?
답변1
드롭베어 콜getpwnam
사용자 계정에 대한 정보를 얻기 위한 표준 라이브러리 함수입니다. GNU libc(비임베디드 Linux 시스템용 표준 라이브러리)가 있는 시스템에서 이 기능은 다음을 통해 액세스할 수 있습니다.국가 안보 서비스 메커니즘, 포함하다/etc/passwd
. 임베디드 시스템은 다양한 libcs(uClibc, Dietlibc 등)를 실행할 수 있으며, /etc/passwd
내부에 경로가 내장되어 있는 경향이 있습니다.
/etc/passwd
dropbear(또는 libc)를 패치하고 다시 컴파일하지 않고 어떻게든 이 파일을 제공 해야 합니다 . 파일 시스템을 수정하는 것이 아니라 이러한 위치에 있는 다른 파일 시스템의 파일을 제공하도록 커널에 지시하여 읽기 전용 파일 시스템 위에 추가 파일을 표시하는 방법에는 여러 가지가 있습니다. 일반적인 메커니즘은공동 설치그러나 임베디드 Linux 시스템에는 종종 좋은 공동 장착 기능이 부족합니다.
파일 시스템 위치를 다른 콘텐츠로 덮어쓰는 비교적 간단한 방법은 입니다 mount --bind
. mount --bind /else/where
/some/where , any access to a file
/some/where/somefile actually accesses the file
/else/where/somefile ; any file in the “true”
/else/where is hidden. However, you cannot directly make a file appear this way: both
/else/where and
/some/where have to exist (although they don't have to be directories). So you can't make
/etc/passwd come into existence, but you can override
/etc` 명령을 실행한 후.
/etc
귀하의 ./custom/etc
가정 을 포함할 디렉토리를 생성하십시오 .mkdir /custom/etc
원본을 재배치할 마운트 지점을 만듭니다
/etc/
.mkdir /custom/original-etc
대체
etc
원본 파일에 심볼릭 링크를 만듭니다.cd /etc for x in *; do ln -s "../original-etc/$x" "/custom/etc/$x"; done
passwd
대체 계층 구조에 파일을 만듭니다etc
.echo "root:x:0:0:root:/:/bin/sh" >/custom/etc/passwd
/etc
부팅 시 먼저 바인드 마운트를 수행하여 원래 계층 구조의 뷰를 생성한 다음 바인드 마운트를 수행하여 /custom/original-etc
대체 뷰를 생성합니다. 이 명령을 시작 중에 실행되는 스크립트에 넣으세요(물론 dropbear를 시작하기 전에 dropbear 서버를 시작하는 것과 동일한 스크립트)./etc
/etc
mount --bind /etc /custom/original-etc
mount --bind /custom/etc /etc