ubuntu 16.04无网络升级OpenSSH 9.3

安装gcc/make/telnet

gcc和make编译用
telnet防止OpenSSH升级失败22端口中断连接
详情参见另一篇文档
ubuntu无网络安装gcc/make/telnet

升级OpenSSH

提前下载 openssh、openssl、zlib 包,并上传至服务器
下载可前往阿里云镜像站
本文使用:
ubuntu 16.04
openssh 9.3p1
openssl 3.1.0
zlib 1.2.13

卸载原版本

注意一定要在上面源码包上传至服务器,且gcc/make/telnet安装后执行

######################################################
# 在telnet连接下进行 需要使用另一台服务器能连接本服务器
telnet ip
# 输入账号密码
######################################################

# 停止sshd 22的端口监听服务
sudo service sshd stop

# 清除ssh配置
sudo apt purge ssh

# 卸载ssh
sudo apt-get remove openssh-server
sudo apt-get remove openssh-client

以下全在另台服务器使用telnet连接操作

安装zlib
# 解压
sudo tar -xvf zlib-1.2.13.tar.gz

cd zlib-1.2.13

sudo mkdir -p /usr/local/zlib-1.2.13

sudo ./configure --prefix=/usr/local/zlib-1.2.13/

sudo make
sudo make install
安装openssl
# 备份老版 openssl (可能老版本的文件不存在,略过)
sudo mv /usr/bin/openssl /usr/bin/openssl.old
sudo mv /usr/include/openssl /usr/include/openssl.old
sudo mv /usr/local/openssl /usr/local/openssl.old

# 解压
sudo tar -xvf openssl-3.1.0.tar.gz

cd openssl-3.1.0

sudo mkdir -p /usr/local/ssl-3.1.0

sudo ./config shared --prefix=/usr/local/ssl-3.1.0/

# 时间较长,耐心等待
sudo make test
sudo make install

# 建立软连接 (注意根据自己实际路径更改)
sudo ln -s /usr/local/ssl-3.1.0/lib64/libssl.so.3 /usr/lib/libssl.so.3
sudo ln -s /usr/local/ssl-3.1.0/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3
安装openssh
# 解压
sudo tar -xvf openssh-9.3p1.tar.gz

cd openssh-9.3p1

sudo mkdir -p /usr/local/ssh-9.3

# 校验安装
sudo ./configure --prefix=/usr/local/ssh-9.3 --with-zlib=/usr/local/zlib-1.2.13 --with-ssl-dir=/usr/local/ssl-3.1.0

sudo make
sudo make install

# 备份原版本 (第一步已经删除了原版本 所以这里会报 No such file or directory 可以不用执行)
# sudo mv /usr/bin/scp /tmp/
# sudo mv /usr/bin/ssh* /tmp/

# 建立软连接 (注意根据自己实际路径更改)
sudo ln -s /usr/local/ssh-9.3/bin/ssh /usr/bin/ssh
sudo ln -s /usr/local/ssh-9.3/bin/sftp /usr/bin/sftp
sudo ln -s /usr/local/ssh-9.3/bin/scp /usr/bin/scp
sudo ln -s /usr/local/ssh-9.3/bin/ssh-add /usr/bin/ssh-add
sudo ln -s /usr/local/ssh-9.3/bin/ssh-agent /usr/bin/ssh-agent
sudo ln -s /usr/local/ssh-9.3/bin/ssh-keygen  /usr/bin/ssh-keygen
sudo ln -s /usr/local/ssh-9.3/bin/ssh-keyscan /usr/bin/ssh-keyscan
sudo ln -s /usr/local/ssh-9.3/sbin/sshd /usr/bin/sshd

# 建立软连接过程中 如果报错
# ln: failed to create symbolic link '******': File exists
# 说明已经有了,需要先删除再进行连接

# ===================================================================================

# 安装完毕后连接ssl和sshd文件
# 备份原版本sshd ((第一步已经删除了原版本 所以这里会报 No such file or directory 可以不用执行)
# sudo mv /usr/sbin/sshd /usr/sbin/sshd.bk

# sshd
sudo ln -s /usr/local/ssh-9.3/sbin/sshd /usr/sbin/

# ssl
sudo ln -s /usr/local/ssl-3.1.0/bin/openssl /usr/bin/openssl
sudo ln -s /usr/local/ssl-3.1.0/include/openssl /usr/include/openssl

# ===================================================================================

# 验证安装 (验证版本)
ssh -V
sshd -V
openssl version -a

# ===================================================================================

# 启动
sudo service sshd stop
sudo service sshd start

# 加载配置
sudo service sshd reload
# sudo service sshd restart
启动问题
# 启动失败
sudo service sshd start
# 输出:Failed to start ssh.service: Unit ssh.service is masked.
# 表示该服务已被屏蔽。这通常是出于安全原因,以防止意外启动服务。
# 可以尝试使用以下命令来解除屏蔽并启动 OpenSSH
# 解除屏蔽:
sudo systemctl unmask ssh.service
# 启动OpenSSH:
sudo service sshd start


# 启动后查询ssh状态
sudo systemctl status sshd
# Active状态为 active (running) 则表示正常运行(升级成功)

# Active状态为 active (exited) 则表示ssh没有正常运行 需要执行下面进行修复
# 查看ssh日志
sudo journalctl -u ssh.service
# Shift+G 切换到最后一行
# 如果显示 Started LSB: OpenBSD Secure Shell server.
# 则表示 SSH 服务已经成功启动并且没有出现任何错误
# 可以尝试使用以下命令重新加载ssh
sudo systemctl daemon-reload
sudo service sshd restart
sudo service sshd status

################################################################################
# Active状态有以下几种:
# active (running):服务正在运行。
# active (exited):服务已经完成了它的工作并已退出。
# active (waiting):服务正在等待某些事件的发生,例如网络连接或其他服务的启动。
# active (start):服务正在启动(启动失败会一直重启)。
# inactive (dead):服务已经停止或从未启动过。
# activating:服务正在启动过程中。
# deactivating:服务正在停止过程中。
# failed:服务启动失败或已经停止,并且无法自动恢复。
################################################################################

# 题外话:
# 如果要检查SSH服务是否正在运行,也可以使用以下命今:
sudo systemctl is-active ssh
# 如果输出"active",则表示SSH服务正在运行。
# 如果输出”nactive,则表示SSH服务未运行。
# 如果输出"ailed",则表示SSH服务启动失败。
连接问题
# 在其他Linux服务器中使用ssh username@IP 连接时,会报错
# 这是因为在SSH连接到主机时,会将主机的公钥保存在本地计算机的known_hosts文件中。
# 如果主机的公钥发生了变化,可能会出现安全问题,因此需要删除已保存的公钥,以便下次连接时重新验证主机的公钥。
# 一般在执行 ssh username@IP 连接后,会提示你进行下面命令进行删除
# 删除命令
ssh-keygen -f "/home/username/.ssh/known_hosts" -R IP
# 例如
# ssh-keygen -f "/home/unhappy/.ssh/known_hosts" -R 192.168.1.96

# 同样window中也有类似的文件,手动删除即可
# 该文件通常位于用户主目录下的.ssh目录中
# 路径为 C:\Users\username\.ssh\known_hosts

# 如果是内网环境使用堡垒机(OPC)访问
# 则需要堡垒机管理员删除中间服务器上的公钥
# 联系堡垒机管理员即可
开机启动
# 检查SSH服务是否在开机时启动
systemctl is-enabled ssh
# 如果该命令返回“enabled”,则SSH服务已设置为开机启动项。
# 如果返回“disabled”,则SSH服务未设置为开机启动项。

# 按照此教程安装ssh后输出信息大致如下
ssh.service is not a native service, redirecting to systemd-sysv-install
Executing /lib/systemd/systemd-sysv-install is-enabled ssh
enabled
# 这个输出信息表明SSH服务不是一个原生的systemd服务,而是一个使用sysvinit脚本管理的服务。
# 因此,当您运行 systemctl is-enabled ssh 命令时,
# systemd会将其重定向到 systemd-sysv-install 命令来检查SSH服务是否已启用。
# 这不是错误,并且不会对“ssh”服务的功能产生重大影响。
# 最后一行输出 enabled 表示SSH服务已经被设置为开机启动项。

# 如果最后一行输出 disabled,则需要设置为开机项
sudo systemctl enable ssh
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值