1.在线安装telnet-server服务
apt-get install openbsd-inetd telnetd telnet -y
一共安装了三个服务 openbsd-inetd ,telnetd, telnet ,其中openbsd-inetd,telnetd 是telnet 服务端,安装时确保防火墙的23端口已经打开,telnet是telnet的客户端服务.
2.如果ubuntu 没有安装gcc 编译器,需要安装gcc,因为后面的openssl和openssh 安装程序都是源文件,需要编译后再安装的.
使用如下命令检查是否安装了gcc 编译器:
gcc --version
结果:
如果没有上图的提示:
那么需要安装:
sudo apt install build-essential]
注意:保持网络畅通,可以使用ping www.baidu.com 先检查一下,如果不通的话,vim /etc/resolv.conf修改dns配置,在其中添加nameserver 8.8.8.8,或者vim /etc/netplan/00-installer-config.yaml,添加nameservers:addresses: [8.8.8.8,114.114.114.114]
上面两步做完了就可以使用另外一台服务器来telnet一下ubuntu这台服务器了,假设这台ubuntu的ip 是172.22.11.111
telnet 172.22.11.111 23
得到结果:
说明ubuntu的telnet服务已经开启,这一步是为了防止后面的安装过程中如果出现ssh连接断开情况,我们已经把ssh服务清除掉了,所以再次使用ssh登录时,是无法登录的,所以需要telnet服务提前开启,如果出现ssh服务断开的情况,还是可以使用telnet服务继续安装.
开始正式安装
3.卸载原有openssh
sudo apt-get remove openssh-server openssh-client -y
sudo apt-get remove openssl
4.安装 libpam0g-dev, libssl-dev
libpam0g-dev 依赖于libssl-dev
sudo apt-get update -y
sudo apt-get install libpam0g-dev -y
备注:备份 /etc/ssh、 /etc/init.d/ssh 这个很重要
sudo mv /etc/ssh /etc/ssh.bak
sudo mv /etc/init.d/ssh /etc/init.d/ssh.bak
5.安装zlib
cd /home/sys-software
sudo tar zxvf zlib-1.3.1.tar.gz #解压
cd zlib-1.3.1/ #
sudo ./configure --shared #
sudo make && make install
6.安装openssl
cd /home/sys-software
tar zxvf openssl-3.2.1.tar.gz
cd openssl-3.2.1/
./config --shared zlib #这一步时间很久,大概要20分钟make && make install
mv /usr/bin/openssl /usr/bin/openssl.bak
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/opensslmkdir -p /usr/local/openssl/lib64
ln -s /usr/local/lib64/libssl.so /usr/local/openssl/lib64/libssl.soecho “/usr/local/openssl/lib64” > /etc/ld.so.conf.d/openssl.conf #这一步如果是在telnet中执行会跳出,我是直接手敲的,如果是在ssh连接中执行不会有问题
ln -s /usr/local/lib64/libssl.so.3 /usr/lib/libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3 /usr/lib/libcrypto.so.3openssl version
得到结果:
7.安装更新ssh
cd /home/sys-software
tar zxvf openssh-9.6p1.tar.gz
cd /home/sys-software/openssh-9.6p1
./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-ssl-dir=/usr/include/openssl --with-privsep-path=/var/lib/ssh --with-ssl-dir=/home/sys-software/openssl-3.2.1 #这个路径就是上一步安装openssl的路径,不要搞错了哦
make && make install
ssh -V
得到结果:
8.启动ssh
cd /etc/ssh
mv sshd_config sshd_config.default
cp ../ssh.bak/sshd_config ./ #备份的配置文件还原回去
mv /etc/init.d/ssh.bak /etc/init.d/ssh #备份的配置文件还原回去
systemctl unmask ssh
systemctl restart sshd
9.重新使用ssh协议登录验证一下,成功了就可以使用关闭telnet
systemctl stop openbsd-inetd
systemctl status openbsd-inetd
几个遇到的问题:
1.使用systemctl status sshd查看,发现状态一直是starting 的,而不是running的,使用systemctl restart sshd 重启会一直卡着,是因为ssh服务启动完毕后,需通知Systemd,才能继续往下执行,返回信号。 systemctl restart sshd
Job for ssh.service failed because a timeout was exceeded. See “systemctl status ssh.service” and “journalctl -xe” for details.
可修改sh的systemctl文件/lib/systemd/system/ssh.service中Type一项: Type=notify改为Type=simple,这样systemctl不会等待ssh返回的信号,systemctl daemon-reload并重启sshd进程可以解决systemctl超时的问题
sed -i “s/Type=notify/Type=simple/” /lib/systemd/system/ssh.service
2.sftp协议无法使用,传不了文件
vim /etc/ssh/sshd_config
#Subsystem sftp /usr/local/openssh/libexec/sftp-server改成下面这句
Subsystem sftp internal-sftp
systemctl restart sshd #重启服务生效