业务需求,需要将服务器的OpenSSH版本从8.2升级到最新版本(9.9),由于apt能提供的最新版本就是8.2,所以需要采用源码安装的方式。
1. 准备环境
确保系统已更新:
sudo apt update && sudo apt upgrade
安装必要的依赖:
sudo apt install -y build-essential zlib1g-dev libssl-dev
2. 下载OpenSSH源码
从OpenSSH官方网站下载源码包:
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-<version>.tar.gz
(将替换为需要的版本号,例如9.9p1)。
3. 解压源码包
tar -xzf openssh-<version>.tar.gz
cd openssh-<version>
4. 配置和编译
配置编译环境:
./configure --prefix=/usr --sysconfdir=/etc/ssh
编译并安装:
make
sudo make install
5. 配置并启动服务
确保配置文件存在并有效:
sudo cp sshd_config /etc/ssh/sshd_config
启动服务:
sudo systemctl restart ssh
6. 验证安装
检查版本号:
ssh -V
OpenSSH_9.9p1, OpenSSL 1.1.1f 31 Mar 2020
版本是升上去了,但是发现SSH客户端和SFTP无法登陆了。
各种找原因。
首先,OpenSSH 配置问题,在/etc/ssh/sshd_config中,按照以下配置修改:
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no # 可根据需求启用或禁用
如果是因为加密算法不兼容的话,再添加上:
KexAlgorithms +diffie-hellman-group1-sha1
HostKeyAlgorithms +ssh-rsa
修改后重启服务:
sudo systemctl restart ssh
按照上面修改完之后,发现还是无法登陆,于是去查看日志:
sudo tail -f /var/log/auth.log
终于被我逮住了,
日志显示:
User 《用户名》 not allowed because account is locked
表明用户 《用户名》 的账户在系统中被锁定,导致无法通过 SSH 登录。这个问题通常与系统账户状态或权限相关。
原因分析:
账户被锁定可能由以下原因引起:
1、用户密码被禁用:
通过 passwd -S 用户名 检查用户状态,如果显示 L 或 LK,表示账户被锁定。
2、/etc/shadow 文件中用户标记为锁定:
用户的加密密码字段前有 ! 或 * 标记,表示账户被锁定。
3、PAM 配置或策略限制:
可能由于安全策略导致自动锁定。
4、系统更新或误操作:
升级软件包或修改系统配置时,意外锁定了用户。
解决办法:
1、检查 /etc/shadow
查看并编辑 /etc/shadow 文件:
sudo nano /etc/shadow
找到 ubuntu 的记录,确保密码字段不以 ! 或 * 开头。正常格式示例:
ubuntu:$6$encryptedpassword:...
如果以 ! 开头,例如 ubuntu:!$6$encryptedpassword:...
,则移除 !。
保存文件后,重启 SSH 服务:
sudo systemctl restart sshd
最后,成功登陆服务器。