/etc/passwdなしで組み込みLinuxで実行されているSSHサーバーにどのように接続しますか?

/etc/passwdなしで組み込みLinuxで実行されているSSHサーバーにどのように接続しますか?

リモートコンピュータ(内蔵Linuxを実行)にSSHサーバーをインストールした後、ホストコンピュータからSSHサーバーに接続しようとしましたが失敗しました。

/etc/passwdこれは、私のターゲット埋め込みLinuxにユーザーアカウントがなく、書き込みできないため、/etcsshサーバーに接続するときにユーザーアカウントを指定できないためです(ssh接続にはアカウントパスワードが必要です)。したがって、システムにはユーザーアカウントはありません。

ホストシステムからリモートシステムのSSHサーバーに接続する他の方法はありますか? rootユーザーとしてログインしたい。

この質問は、前の質問に対する後続の質問です。「/etc/passwd」なしで組み込みLinuxで自分のアカウントをどのように確認できますか?

答え1

ドロップベアコールgetpwnamユーザーアカウントに関する情報を取得するための標準ライブラリ関数。 GNU libc (非組み込み Linux システム用の標準ライブラリ) を備えたシステムでは、この機能は以下からアクセスできます。国家安全保障サービスメカニズム、含む/etc/passwd。組み込みシステムはさまざまなlibcs​​(uClibc、Dietlibcなど)を実行でき、/etc/passwd内部にパスが組み込まれている傾向があります。

/etc/passwddropbear(またはlibc)をパッチして再コンパイルせずに、何らかの方法でこのファイルを提供する必要があります。ファイルシステムを変更するのではなく、これらの場所にある他のファイルシステムからファイルを提供するようにカーネルに指示して、読み取り専用ファイルシステムの上に追加のファイルを表示する方法はいくつかあります。一般的なメカニズムは共同設置しかし、組み込みLinuxシステムはしばしば良い共同マウント機能を欠いています。

ファイルシステムの場所を他のコンテンツで上書きする比較的簡単な方法はですmount --bindmount --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`コマンドを実行した後。

  1. /etcあなたの。/custom/etc仮定を含むディレクトリを作成します。

    mkdir /custom/etc
    
  2. ソースを再配置するマウントポイントを作成します/etc/

    mkdir /custom/original-etc
    
  3. 代替etcソースファイルにシンボリックリンクを作成します。

    cd /etc
    for x in *; do ln -s "../original-etc/$x" "/custom/etc/$x"; done
    
  4. 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

関連情報