Ubuntu14.04.2升级OpenSSH

  • Post author:
  • Post category:其他


安装依赖

apt -y install gcc g++ make openssl libssl-dev libpam0g-dev

# ubuntu上的zlib1g zlib1g-dev就相当于centos上的zlib和zlib-devel

# 这里之所以没有安装 zlib,是因为


apt安装的zlib在编译安装openssh时并不可用




会报错:

checking zlib.h usability… no

checking zlib.h presence… yes

configure: WARNING: zlib.h: present but cannot be compiled

configure: WARNING: zlib.h:     check for missing prerequisite headers?

configure: WARNING: zlib.h: see the Autoconf documentation

configure: WARNING: zlib.h:     section “Present But Cannot Be Compiled”

configure: WARNING: zlib.h: proceeding with the compiler’s result

configure: WARNING:     ## ——————————————- ##

configure: WARNING:     ## Report this to openssh-unix-dev@mindrot.org ##

configure: WARNING:     ## ——————————————- ##

checking for zlib.h… no

configure: error: *** zlib.h missing – please install first or check config.log ***

编译安装zlib

# 截至2022年5月,最新的zlib是zlib-1.2.12,可以登录到官网查看自己需要的版本
# 编译openssh时需要指定zlib位置:--with-zlib=/usr/local/zlib
wget http://www.zlib.net/zlib-1.2.12.tar.gz
tar zxvf zlib-1.2.12.tar.gz 
cd zlib-1.2.12/
./configure --prefix=/usr/local/zlib
sudo make && make install

编译安装OpenSSL

目前,openssl被维护了两个版本1.1.1和3.0。这里,选择1.1.1o

  • 注意: 最新的稳定版本是3.0系列。1.1.1系列是我们的长期支持(LTS)版本,支持到2023年9月11日。所有旧版本(包括1.1.0、1.0.2、1.0.0和0.9.8)现在都不支持,不应该使用。这些旧版本的用户被鼓励尽快升级到3.0或1.1.1。对1.0.2的扩展支持可以访问该版本的安全修复。
  • OpenSSL 3.0是 OpenSSL 的最新主要版本。OpenSSL FIPS 对象模块(FOM)3.0是 OpenSSL 3.0下载的集成部分。您不需要单独下载3.0 FOM。请参考下载内部的安装说明,并使用“ enable-fips”编译时配置选项来构建它。
  • OpenSSL 3.0 系列的变化首先体现在许可证方面:之前的版本(例如:1.1.1系列)使用 OpenSSL 和 SSLeay 双重许可证;OpenSSL 3.0.0版本开始,转而使用 Apache v2 许可证
wget https://github.com/openssl/openssl/archive/refs/tags/OpenSSL_1_1_1o.tar.gz
tar zxvf OpenSSL_1_1_1o.tar.gz 
cd openssl-OpenSSL_1_1_1o/
./config --prefix=/usr/local/openssl
make depend
make tests
make && make install
#检查函数库,通过检查确认缺少的函数库
ldd /usr/local/openssl/bin/openssl
#添加所缺函数库
echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
ldconfig -v #更新函数库
/usr/local/openssl/bin/openssl version #查看新安装的版本
#查看旧版本openssl命令在哪里,这里根据实际情况,进行下一步
which openssl
mv /usr/bin/openssl /usr/bin/openssl.old #将旧版本openssl移除
#新版本制作软链接
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
openssl version  最后查看版本,更新完毕

编译安装OpenSSH

## 下载openssh tar包
https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz
## 备份ssh配置目录
mv /etc/ssh{,.bak}
# ubuntu上类似SELinux的是apparmor,所以不要指定--with-selinux
./configure --prefix=/usr/local/openssh --exec-prefix=/usr --sysconfdir=/etc/ssh --with-ssl-dir=/usr/local/openssl --with-md5-passwords --with-pam --mandir=/usr/share/man --with-zlib=/usr/local/zlib --with-privsep-path=/var/lib/sshd --without-hardening
……
PAM is enabled. You may need to install a PAM control file for sshd, otherwise password authentication may fail. 
Example PAM control files can be found in the contrib/ subdirectory

## 这里虽然让用新的pam文件替换掉旧的/etc/pam.d/sshd,但Ubuntu上是不需要替换的。
sudo make && make install
……
make[1]: Entering directory `/opt/openssh-8.6p1/openbsd-compat'
make[1]: Nothing to be done for `all'.
make[1]: Leaving directory `/opt/openssh-8.6p1/openbsd-compat'
/bin/mkdir -p /usr/bin
/bin/mkdir -p /usr/sbin
/bin/mkdir -p /usr/share/man/man1
/bin/mkdir -p /usr/share/man/man5
/bin/mkdir -p /usr/share/man/man8
/bin/mkdir -p /usr/libexec
/bin/mkdir -p -m 0755 /var/lib/sshd
/usr/bin/install -c -m 0755 -s ssh /usr/bin/ssh
/usr/bin/install -c -m 0755 -s scp /usr/bin/scp
/usr/bin/install -c -m 0755 -s ssh-add /usr/bin/ssh-add
/usr/bin/install -c -m 0755 -s ssh-agent /usr/bin/ssh-agent
/usr/bin/install -c -m 0755 -s ssh-keygen /usr/bin/ssh-keygen
/usr/bin/install -c -m 0755 -s ssh-keyscan /usr/bin/ssh-keyscan
/usr/bin/install -c -m 0755 -s sshd /usr/sbin/sshd
/usr/bin/install -c -m 4711 -s ssh-keysign /usr/libexec/ssh-keysign
/usr/bin/install -c -m 0755 -s ssh-pkcs11-helper /usr/libexec/ssh-pkcs11-helper
/usr/bin/install -c -m 0755 -s ssh-sk-helper /usr/libexec/ssh-sk-helper
/usr/bin/install -c -m 0755 -s sftp /usr/bin/sftp
/usr/bin/install -c -m 0755 -s sftp-server /usr/libexec/sftp-server
/usr/bin/install -c -m 644 ssh.1.out /usr/share/man/man1/ssh.1
/usr/bin/install -c -m 644 scp.1.out /usr/share/man/man1/scp.1
/usr/bin/install -c -m 644 ssh-add.1.out /usr/share/man/man1/ssh-add.1
/usr/bin/install -c -m 644 ssh-agent.1.out /usr/share/man/man1/ssh-agent.1
/usr/bin/install -c -m 644 ssh-keygen.1.out /usr/share/man/man1/ssh-keygen.1
/usr/bin/install -c -m 644 ssh-keyscan.1.out /usr/share/man/man1/ssh-keyscan.1
/usr/bin/install -c -m 644 moduli.5.out /usr/share/man/man5/moduli.5
/usr/bin/install -c -m 644 sshd_config.5.out /usr/share/man/man5/sshd_config.5
/usr/bin/install -c -m 644 ssh_config.5.out /usr/share/man/man5/ssh_config.5
/usr/bin/install -c -m 644 sshd.8.out /usr/share/man/man8/sshd.8
/usr/bin/install -c -m 644 sftp.1.out /usr/share/man/man1/sftp.1
/usr/bin/install -c -m 644 sftp-server.8.out /usr/share/man/man8/sftp-server.8
/usr/bin/install -c -m 644 ssh-keysign.8.out /usr/share/man/man8/ssh-keysign.8
/usr/bin/install -c -m 644 ssh-pkcs11-helper.8.out /usr/share/man/man8/ssh-pkcs11-helper.8
/usr/bin/install -c -m 644 ssh-sk-helper.8.out /usr/share/man/man8/ssh-sk-helper.8
/bin/mkdir -p /etc/ssh
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 
/usr/sbin/sshd -t -f /etc/ssh/sshd_config
# 修改sshd_config,放开PAM认证
#UsePAM no
UsePAM yes

验证并启动openssh

ssh -V
OpenSSH_8.6p1, OpenSSL 1.1.1o  15 Mar 2022
service ssh restart
service ssh status
ssh start/spawned, process 1268

FAQ

正常情况下,执行完上述步骤之后,一切都OK,但也许会有如下现象:


问题一:公钥认证登录失败

查看/var/log/auth.log发现报错:

userauth_pubkey: signature algorithm

ssh-rsa not in PubkeyAcceptedAlgorithms

[preauth]

执行如下命令发现是支持ssh-rsa的:


ssh -Q PubkeyAcceptedAlgorithms


ssh-ed25519

ssh-ed25519-cert-v01@openssh.com

sk-ssh-ed25519@openssh.com

sk-ssh-ed25519-cert-v01@openssh.com

ssh-rsa

rsa-sha2-256

rsa-sha2-512

ssh-dss

ecdsa-sha2-nistp256

ecdsa-sha2-nistp384

ecdsa-sha2-nistp521

sk-ecdsa-sha2-nistp256@openssh.com

webauthn-sk-ecdsa-sha2-nistp256@openssh.com

ssh-rsa-cert-v01@openssh.com

rsa-sha2-256-cert-v01@openssh.com

rsa-sha2-512-cert-v01@openssh.com

ssh-dss-cert-v01@openssh.com

ecdsa-sha2-nistp256-cert-v01@openssh.com

ecdsa-sha2-nistp384-cert-v01@openssh.com

ecdsa-sha2-nistp521-cert-v01@openssh.com

sk-ecdsa-sha2-nistp256-cert-v01@openssh.com

应该是openssh默认不支持了,手动修改sshd_config:

PubkeyAcceptedAlgorithms +ssh-rsa

重新加载配置文件:service ssh reload

重新登录,恢复正常。


问题二:

openssh升级之后,service ssh restart总卡死,且


password认证失败


解决:(未验证到底因为啥恢复正常的)

1、修改/etc/init.d/ssh 将其check_privsep_dir()中的/var/run/sshd修改成/var/lib/sshd,重启服务OK了。

check_privsep_dir() {


# Create the PrivSep empty dir if necessary

if [ ! -d /var/lib/sshd ]; then

mkdir /var/lib/sshd

chmod 0755 /var/lib/sshd

fi

}

2、重装了libpam0g-dev



版权声明:本文为avatar_2009原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。