GNU/Linux >> LINUX-Kenntnisse >  >> Linux

keine Versionsinformationen verfügbar (wird von /usr/bin/ssh benötigt)

Problem:libssl.so.1.0.0 und libcrypto.so.1.0.0 Keine Versionsinformationen verfügbar Warnung/Fehler.

Nach viel Recherche, Zeit und Mühe (dauerte Wochen) habe ich schließlich Folgendes getan ...

In dem Verzeichnis, in dem Sie den Quellcode für Ihre Version von openssl 1.0.1h extrahiert haben (sollte auch für andere Versionen funktionieren.), erstelle ich eine Datei namens openssl.ld

In diese Datei fügen Sie Folgendes ein...

OPENSSL_1.0.0 {
    global:
    *;
};

speichern. Jetzt eintippen...

make clean

(Nur um sicherzugehen, dass wir neu anfangen.)

Nun zum wirklich verblüffenden Teil...

./config --prefix=/usr/local --openssldir=/usr/local/openssl shared -Wl,--version-script=openssl.ld -Wl,-Bsymbolic-functions

Dann...

make
make test
make install
ldconfig

Und das sollte es tun. (Es ist so einfach. Kein Patchen erforderlich.)

Ich habe diese Lösung auf die 32- und 64-Bit-Versionen von Debian Wheezy angewendet. Und habe eine Beobachtung gemacht. Die 64-Bit-Version verwendet automatisch den neuen libssl.so.1.0.0 und libcrypto.so.1.0.0 Dateien, die im /usr/local/lib erstellt werden Verzeichnis. Die 32-Bit-Version nicht. Deshalb dachte ich zuerst, dass die 32-Bit-Version von Debian Wheezy nicht unter diesem Problem leidet, aber sobald Sie die 32-Bit-Version haben, können Sie die neuen Openssl-Bibliotheken in /usr/local/lib verwenden dir.

Mit ldd Der Befehl zum Testen, welche Bibliotheken die Binärdateien verwenden, war ebenfalls von unschätzbarem Wert, um dies herauszufinden.


Ich habe das openssl kompiliert und installiert. Danach habe ich ssh über apt-get installiert.

Dies sind wahrscheinlich zwei verschiedene Versionen von OpenSSL. Sie werden wahrscheinlich in Ordnung sein, da 1.0.0 binärkompatibel mit 1.0.1, 1.0.2 usw. ist (es wird jedoch nicht binärkompatibel mit 1.1.0 sein).

Ihr ssh verwendet wahrscheinlich die Version von OpenSSL in /usr/lib/x86_64-linux-gnu/ . Sie sollten LD_PRELOAD verwenden um sicherzustellen, dass Ihre Version von OpenSSL verwendet wird (natürlich unter der Annahme der Binärkompatibilität).

Wenn Sie LD_PRELOAD nicht verwenden möchten und Freunde, dann bauen Sie ssh aus Quellen. Achten Sie darauf, einen rpath anzugeben um sicherzustellen, dass der Link-Editor Ihre Version von OpenSSL verwendet, nicht die Version des Systems. Das heißt, Ihr LDFLAGS sollte so etwas wie -Wl,-rpath,<path to your openssl> enthalten . Das ist zusätzlich zum üblichen -lcrypto , -lssl und -L<path to your openssl> .

Wenn Sie Mac OS X verwenden, beachten Sie, dass Linker-Optionen wie -Bstatic und -rpath werden stillschweigend ignoriert. Sie werden auf mysteriöse Abstürze aufgrund inkompatibler Binärdateien stoßen, da OS X 0.9.8 bereitstellt.

keine Versionsinformationen verfügbar

Was keine Versionsinformationen betrifft, habe ich keine Ahnung. ssh kann entweder OPENSSL_VERSION_NUMBER verwenden zur Kompilierzeit oder SSLeay /SSLeay_version zur Laufzeit. Siehe OPENSSL_VERSION_NUMBER(3) für Details.

Wie kann dieser Fehler behoben werden?

Vielleicht verstehe ich die Dinge falsch, aber ich sehe nirgendwo in dem Beitrag einen Fehler.


Linux
  1. Warum zeigt /bin/sh auf /bin/dash und nicht auf /bin/bash?

  2. Installieren Sie Binärdateien in /bin, /sbin, /usr/bin und /usr/sbin, Interaktionen mit --prefix und DESTDIR

  3. Berechtigung für Composer in /usr/local/bin/ verweigert

  4. Was bedeuten /usr/sbin, /usr/local/sbin und /usr/local/bin?

  5. Wann muss ich #!/bin/bash und wann #!/bin/sh verwenden?

/usr/bin vs. /usr/local/bin Unter Linux?

Linux – /sbin/init existiert nicht?

Unterschied zwischen /bin und /usr/bin

/bin Inhalt nach /usr/bin verschoben, rückgängig machen möglich?

Sollten Websites gemäß der empfohlenen Verwendung in /var/ oder /usr/ leben?

#!/bin/sh vs. #!/bin/bash für maximale Portabilität