
Putty を使用して PC からボード (Imx6 Humming ボード) に ssh しようとしています。PuTTY のログイン プロンプトの直後に「予期せずネットワーク接続が閉じられました」というメッセージが表示されます。ルート ファイル システム内のこれらの 2 つのライブラリを置き換えると、問題は解決します。これらのファイルが問題を引き起こすのはなぜですか。また、これらのファイルは ssh にどのような依存関係があるのでしょうか。これらの 2 つのライブラリ ファイルに関する助言をいただければ幸いです。
答え1
libnss_files.so は、実際に /etc/passwd、/etc/group、/etc/hosts を読み取るライブラリです。これがないと、プログラムはユーザー名とユーザー ID を検索できません。OpenSSH はユーザーの UID とホーム ディレクトリを認識できず、実際にユーザーが存在することも認識できません。
同様に、libnss_dns.so は DNS クエリを作成するライブラリです。これはシステム上の唯一の DNS ライブラリではありませんが、ほとんどのプログラムが使用する一般的な「ドメインをアドレスに解決する」機能を処理するライブラリです。
一般的に、これらはそれぞれ DNS とファイルからのディレクトリ情報の検索を処理する Glibc モジュールです。ここでの「ディレクトリ情報」とは、1) /etc/passwd や /etc/group のようなユーザー アカウント、および 2) DNS や /etc/hosts のようなホスト名を意味します。(言い換えると、電話帳のようなディレクトリであり、ファイル フォルダーのようなディレクトリではありません。)
のlibcC で書かれたプログラムで使用される標準ライブラリには、ソースに関係なくディレクトリ情報を検索するための汎用関数があります。つまり、実際のプログラムは DNS や /etc を気にする必要はなく、ユーザー名 (またはホスト名、グループ、TCP ポートなど) を検索するために libc 関数を呼び出すだけで、libc は適切なソースからそれを取得します。
ほとんどのLinuxシステムで使用されているlibcであるGlibcには、モジュラー情報ソース – システム管理者は新しい情報ソースを追加したり、順序を変更したりできます。libc の「コア」は /etc/passwd や /etc/hosts の詳細を把握しているのではなく、そのタスクを「libnss_files」モジュールに委任しています。同様に、DNS に関する知識は「libnss_dns」モジュールにあります。
プログラムがドメイン名を解決する必要があるときはいつでも、libc は /etc/nsswitch.conf で設定されている各モジュールを調べます。まず、「files」モジュール (/etc/hosts をチェック) に問い合わせ、次に「dns」モジュール (DNS をチェック) に問い合わせて、回答が得られるまで続けます。mDNS (「.local」ドメイン)、NetBIOS などの他のモジュールが存在する場合もあります。
同様に、プログラムがユーザー名を UID に、または UID をユーザー名に解決する必要がある場合は、libc は 'files' モジュールに /etc/passwd からユーザーを取得するように要求します。(また、'ldap'、'pgsql'、'nis' など、代替ソースからユーザー アカウント情報を取得する他のモジュールが存在する可能性があります。)