Preâmbulo: Conforme observado na pergunta, o openssl é instalado por padrão em /usr/local/ssl . Minha recomendação é usar ./config --prefix=/usr/local shared (observe o espaço antes de "compartilhado") para que ele seja instalado lá (e construa a biblioteca compartilhada, libssl ), em vez de seu próprio subdiretório particular. Se você não fizer isso, terá que adicionar um arquivo a /etc/ld.so.conf.d com /usr/local/ssl/lib (veja abaixo a importância dos arquivos /etc/ld.so.conf.d ) e adicionar /usr/local/bin a $PATH .
Você precisará executar ldconfig após make install para adicionar as bibliotecas ao cache do vinculador. Se isso não funcionar, continue a ler.
make install provavelmente, por padrão, foi para /usr/local , o que deve ter precedência, mas não pode. Assim, você pode deixar a instalação openssl da sua distribuição para evitar mexer com o gerenciador de pacotes e os pré-requisitos, mas ainda usar sua própria versão localmente construída como padrão. Para verificar:
ldd $(which ssh) | grep libssl
Se você não obtiver nenhuma saída, seu ssh foi vinculado estaticamente e precisa ser reconstruído (veja a resposta de Anton). Caso contrário, isso deve apontar para sua versão /usr/local . Se apontar para outra coisa:
ldconfig -p | grep libssl
A versão /usr/local deve ser mostrada, mas depois de outra. Se sim, pule para "/ usr / local / lib não tem precedência" abaixo. Caso contrário, verifique se /usr/local está no caminho do vinculador em geral:
ldconfig -p | grep "/usr/local"
Se não, grep -r "/usr/local" /etc/ld.so.conf.d . Se não estiver lá, adicione um arquivo a /etc/ld.so.conf.d chamado 00-local.conf com uma linha:
/usr/local/lib
Execute ldconfig (sem opções) e repita isso novamente.
/ usr / local / lib não tem precedência
Encontre o arquivo de configuração do cache do vinculador onde o caminho é adicionado:
grep -r "/usr/local" /etc/ld.so.conf.d
Se não estiver lá, você terá que adicionar um arquivo como explicado acima. Presumindo que seja, o problema é que os arquivos são processados lexicograficamente. Por exemplo, se o conteúdo de /etc/ld.so.conf.d for:
addtheselibraries.conf
libc.conf
E libc.conf contém /usr/local/lib , mas addtheselibraries.conf contém, por ex. /usr/lib , 1 então o último terá precedência. Se o arquivo /usr/local/lib não contiver mais nada, basta renomeá-lo com algo que substituirá os outros arquivos; números vão primeiro, então 000-whatever é bom.
Como você tem controle total sobre /usr/local/lib , ele deve ter precedência sobre os caminhos usados pelo gerenciador de pacotes de distribuição (e geralmente faz).
1. / usr / lib é um padrão compilado no linker, mas ele e outros locais padrão do sistema (/ lib, etc) são adicionados last , o que permite que você os substitua. Por causa disso, às vezes (por exemplo) /usr/lib é adicionado a um arquivo .conf para fazer com que ele substitua algum outro arquivo .conf.