启动打开 ssh 时出错:/usr/sbin/sshd:/lib/libcrypt.so.1:找不到版本“XCRYPT_2.0”(/usr/sbin/sshd 需要)

启动打开 ssh 时出错:/usr/sbin/sshd:/lib/libcrypt.so.1:找不到版本“XCRYPT_2.0”(/usr/sbin/sshd 需要)

我正在开发一个嵌入式板,要访问该板,我需要 ssh 才能顺利工作。目前,出于调试目的,我使用串行连接来访问板。

现在,当我尝试启动 openssh 时,它会抛出以下错误:

/usr/sbin/sshd: /lib/libcrypt.so.1: version `XCRYPT_2.0' not found (required by /usr/sbin/sshd)

我有正确的 libcrypt.so.1,它在 /usr/lib/libcrypt.so.1 中提供“XCRYPT_2.0”

这就是我所做的:
rm /lib/libcrypt.so.1

ln -s /usr/lib/libcrypt.so.1 /lib/libcrypt.so.1

我可以让 ssh 工作。但是,我发现我需要删除 /lib/libcrypt.so.1 - 如果这个共享对象不存在,那么我相信 pam_unix.so /其他一些共享对象给我带来了问题。因为我无法登录到主板,即使是串行登录(下次重新启动)。

我什至没有看到“登录”提示。

我的问题是,有没有一种方法可以动态地向 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

我遇到了同样的问题,这是由于 Yocto 版本的更改所致,以前的版本将 libcrypto.so.1 作为 glibc 的一部分安装,现在它是一个名为 libcrypto-....rpm 的包,所以当您删除 /lib/libcrypto* 时,您强制 ssh 重用 /usr/lib 下的那个

相关内容