私は組み込みボードを開発しており、ボードにアクセスするにはスムーズに動作するために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)を使用します。
Linux 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
私も同じ問題がありました。 usr/lib 以下の項目を再利用するよう強制します。