准备
查看 ssh 版本
ssh -V
openssh 下载
Index of /pub/OpenBSD/OpenSSH/portable/
下载所需要的版本
本例:openssh-9.3p2.tar.gz
查看 openssl 版本
openssl version
openssl 下载
https://www.openssl.org/source/
下载所需要的版本
本例: openssl-1.1.1w.tar.gz
准备安装及备份
安装 openssl
将 openssl 上传并解压
tar -zxvf openssl-1.1.1w.tar.gz
备份原来的 openssl
mv /usr/bin/openssl /usr/bin/openssl.bak
mv /usr/include/openssl /usr/include/openssl.bak
注意这里需要使用 root 账户 或者命令前加上 sudo ,否则可能出现没有权限的情况;
有时候可能会出现服务器没有移动权限,则使用 cp 命令,再删除
mkdir -p /usrbak/bin/
cp /usr/bin/openssl /usrbak/bin/openssl.bak
mkdir -p /usrbak/include/
cp /usr/include/openssl /usrbak/include/openssl.bak
rm -rf /usr/bin/openssl
rm -rf /usr/include/openssl
安装 openssl
cd /root/openssl-1.1.1w
./config
make -j 4 && make install
如果 make 出现了问题,就先执行 make clean
后再重新执行 make
./config
后示例
make -j 4 && make install
后示例
重建 openssl软连接
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
# 检查openssl-1.1.1w所需要的函数库
ldd /usr/local/bin/openssl
# 添加openssl-1.1.1w的库文件路径到ld.so.conf
echo "/usr/local/lib64" >> /etc/ld.so.conf
# 更新系统函数库
ldconfig -v
# 绝对路径查看openssl版本
ldd /usr/local/bin/openssl
如果提示已经存在,则可以删除重建
查看 openssl 升级结果
openssl version
OpenSSL 1.1.1w 11 Sep 2023
其他目录安装
安装默认目录为:/usr/local/ssl
root 账户没有 usr 的部分操作权限,所以切换目录指定 /root/openssl 安装
cd /root/openssl-1.1.1w
./config --prefix=/root/openssl
make -j 4 && make install
ln -s /root/openssl/bin/openssl /usr/bin/openssl
ln -s /root/openssl/include/openssl /usr/include/openssl
ln -s /root/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /root/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
# 检查openssl-1.1.1w所需要的函数库
ldd /root/openssl/bin/openssl
# 添加openssl-1.1.1w的库文件路径到ld.so.conf
echo "/root/openssl/lib" >> /etc/ld.so.conf
# 更新系统函数库
ldconfig -v
# 绝对路径查看openssl版本
ldd /root/openssl/bin/openssl
vim /etc/profile
export PATH=/root/openssl/bin:$PATH
source /etc/profile
出现 openssl command not found 错误
出现
openssl version
-bash: /usr/bin/openssl: 没有那个文件或目录
或者
-bash: command not found
配置 path
#通过修改profile文件:
vim /etc/profile
/export PATH //找到设置PATH的行,添加
export PATH=/usr/local/openssl/bin:$PATH
立即生效:
source /etc/profile
安装 openssh
将 openssh 上传并解压
tar -zxvf openssh-9.3p2.tar.gz
备份原来的 openssh
通过 whereis ssh
找到 openssh 的文件
备份ssh和sshd文件或目录
mv /etc/ssh /etc/ssh_old.bak
mv /usr/bin/ssh /usr/bin/ssh_old.bak
mv /usr/bin/ssh-keygen /usr/bin/ssh-keygen_old.bak
mv /usr/sbin/sshd /usr/sbin/sshd_old.bak
mv /etc/pam.d/sshd.pam /etc/pam.d/sshd.pam_old.bak
注意这里需要使用 root 账户 或者命令前加上 sudo ,否则可能出现没有权限的情况;
有时候可能会出现服务器没有移动权限,则仿照上方使用 cp 命令,再删除
cp /etc/ssh /etcbak/ssh_old.bak
cp /usr/bin/ssh /usrbak/bin/ssh_old.bak
cp /usr/bin/ssh-keygen /usrbak/bin/ssh-keygen_old.bak
cp /usr/sbin/sshd /usrbak/sbin/sshd_old.bak
cp /etc/pam.d/sshd.pam /etcbak/pam.d/sshd.pam_old.bak
rm -rf /etc/ssh
rm -rf /usr/bin/ssh
rm -rf /usr/bin/ssh-keygen
rm -rf /usr/sbin/sshd
rm -rf /etc/pam.d/sshd.pam
卸载原有的 openssh 包
rpm -e --nodeps `rpm -qa | grep openssh`
初始化 openssh
cd /root/openssh-9.3p2
./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/ssl --with-zlib
如果上面的 configure 不生效,使用下面的
CCFLAGS="-I/usr/local/include" LDFLAGS="-L/usr/local/lib64" ./configure --prefix=/usr/local/openssh --sysconfdir=/etc/ssh --with-pam --with-ssl-dir=/usr/local/ssl --with-zlib
如果提示:configure: error: zlib.h missing - please install first or check config.log
则需要先安装 zlib
官网:https://www.zlib.net/
下方有安装教程
如果提示:configure: error: PAM headers not found
则需要安装 pam
https://github.com/linux-pam/linux-pam
编译安装 openssh
make -j 4 && make install
如果 make 出现了问题,就先执行 make clean
后再重新执行 make
这里如果make install报
Permissions 0640 for '/etc/ssh/ssh_host_ed25519_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
sshd: no hostkeys available -- exiting.
make: [check-config] Error 1 (ignored)
的错误,执行以下命令:
chmod 600 /etc/ssh/*
然后再次执行make install
复制启动 sshd 脚本
# 从源码目录下复制sshd.init到/etc/init.d/
cp /usr/local/openssh/sbin/sshd /usr/sbin/sshd
cp /usr/local/openssh/bin/ssh /usr/bin/ssh
cp /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
cp /root/openssh-9.3p2/contrib/redhat/sshd.init /etc/init.d/sshd
修改配置文件(sshd_config)
文件增加权限
chmod +x /etc/init.d/sshd
# 开启允许X11转发
echo 'X11Forwarding yes' >> /etc/ssh/sshd_config
# 允许root用户通过SSH登录到系统
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 开启允许密码验证
echo "PasswordAuthentication yes" >> /etc/ssh/sshd_config
# 启用公钥身份验证
echo "PubkeyAuthentication yes" >> /etc/ssh/sshd_config
sed -i -e "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config
也可以手动修改
vim /etc/ssh/sshd_config
重新生成 key
rm -f /etc/ssh/sshhost*
ssh-keygen -A
启动openssh,并设置开机启动
chkconfig --add sshd
systemctl enable sshd
systemctl start sshd
systemctl restart sshd
使用 systemctl status sshd.service
查看启动状态
如果提示启动失败,或重启失败,或者被占用,则 reboot
重启服务器
查看版本
ssh -V
sshd -V
OpenSSH_9.3p2, OpenSSL 1.1.1k 25 Mar 2021
如果服务器没有复制和移动权限,则使用创建软连接的方式
ln -s /usr/local/openssh/sbin/sshd /usr/sbin/sshd
ln -s /usr/local/openssh/bin/ssh /usr/bin/ssh
ln -s /usr/local/openssh/bin/ssh-keygen /usr/bin/ssh-keygen
ln -s /root/openssh-9.3p2/contrib/redhat/sshd.init /etc/init.d/sshd
增加权限
chmod +x /etc/init.d/sshd
安装 zlib
如果提示:
checking for zlib.h... no
configure: error: zlib.h missing - please install first or check config.log
则需要安装 zlib
https://www.zlib.net/
#解压
tar -zxvf zlib-1.2.13.tar.gz
cd zlib-1.2.13
#配置
./configure
#编译
make && make install
安装 PAM
如果提示:configure: error: PAM headers not found
则需要安装 pam
https://github.com/linux-pam/linux-pam
tar -xf Linux-PAM-1.5.2.tar.xz
cd Linux-PAM-1.5.2
./configure
make && make install
如果再开启 sshd 时报错
sshd re-exec requires execution with an absolute path
用绝对路径启动,也报错如下:
Could not load host key: /etc/ssh/ssh_host_key
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_dsa_key
Disabling protocol version 1. Could not load host key
Disabling protocol version 2. Could not load host key
sshd: no hostkeys available — exiting
需要执行以下命令生成 key
ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key
ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
/usr/sbin/sshd
如果 ssh 和 sshd 版本不一致 ,还是老版本
确认所有的 SSH 版本
whereis ssh
whereis sshd
查看不同版本的详细信息
/path/to/ssh -V
/path/to/sshd -V
确定默认 SSH 服务 (可能没有)
查看默认的 SSH 服务是否是预期的版本。可以通过查看 /etc/ssh/sshd_config 文件中的 #DefaultPath 行来确定默认的 SSH 服务路径。
检查环境变量
echo $PATH
如果发现旧版本的 SSH 路径,可以修改 ~/.bashrc 或 /etc/profile 文件,调整 PATH 环境变量
vi /etc/profile
source /etc/profile