一、ubuntu

一、默认情况下,linux操作系统我们都是通过ssh进行远程操作,开启telnet一般是在升级ssh的时候需要,开启telnet是为了防止升级ssh之后,无法通过ssh登录系统,可用telnet登录。

安装telnet

apt-get install telnetd xinetd  
  • telnet客户端

  • telnetd服务端

  • xtelnet守护进程

配置 xinetd:编辑/etc/xinetd.d/telnet文件,确保有类似以下配置:

service telnet
{
    disable         = no
    socket_type     = stream
    wait            = no
    user            = root
    server          = /usr/sbin/in.telnetd
    log_on_failure  += USERID
    per_source      = 11
}
  • 确保disable = no

启动并启用 xinetd

sudo systemctl start xinetd
sudo systemctl enable xinetd

由于openssh依赖openssl,所以需要安装新版openssl,从OpenSSH9.4p1开始要求openssl>=1.1.1版本

先不要下载3的版本, 有问题,可以下载1.1.1w

https://www.openssh.com/releasenotes.html #查看ssh发行版说明
https://openssl-library.org/source/old/1.1.1/index.html #下载openssl版本

tar -xzvf openssl-1.1.1w.tar.gz
cd openssl-1.1.1w
mkdir -p /usr/openssh/openssl1.1.1w
./config --prefix=/usr/openssh/openssl1.1.1w
make
make install

编辑/etc/profile配置文件(vi /etc/profile),设置环境变量,在profile文件最后添加如下两行:
export LD_LIBRARY_PATH=/usr/openssh/openssl1.1.1w/lib:$LD_LIBRARY_PATH
export PATH=/usr/openssh/openssh-9.8p1/bin:/usr/openssh/openssh-9.8p1/sbin:/usr/openssh/openssl1.1.1w/bin:$PATH

openssl version

安装依赖

apt install build-essential zlib1g-dev libssl-dev libevent-dev libpam0g-dev libkrb5-dev libedit-dev -y
# build-essential:安装一组编译工具,包括 GCC 编译器、make 工具等,支持从源码编译软件。

apt clean #清理缓存
apt-get download --download-only build-essential zlib1g-dev libssl-dev libevent-dev libpam0g-dev libkrb5-dev libedit-dev #只下载不安装相关依赖包

sudo apt-get --download-only -o Dir::Cache="/download/path/" \ -o Dir::Cache::archives="./" install <PACKAGE_TO_BE_INSTALLED>

下载的包在/var/cache/apt/archives
dpkg -i *.deb

下载二进制包

# 下载OpenSSH二进制包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz 

wget https://mirrors.aliyun.com/pub/OpenBSD/OpenSSH/portable/openssh-9.9p1.tar.gz #阿里云镜像站

tar -zxvf openssh-9.9p1.tar.gz
cd openssh-9.9p1

# 编译安装
./configure --prefix=/usr/local/openssh-9.9p1 --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-privsep-path=/var/lib/sshd
make
make install

make install运行完后执行echo $? 命令(判断上一个命令的执行结果)显示 0 代表编译执行成功。

配置选项说明:

configure 脚本支持多种选项,常用的有:

  • --prefix=/usr/local/ssh:指定安装目录(默认是 /usr/local)。

  • --sysconfdir=/etc/ssh:指定配置文件目录(默认是 /usr/local/etc/ssh)。

  • --with-md5-passwords:启用 MD5 密码支持。

  • --with-privsep-path=/var/lib/sshd:指定特权分离目录。

替换旧版本OpenSSH

备份旧的OpenSSH配置文件和密钥。

mkdir /usr/bin/ssh-bak
cp -arpf /usr/bin/scp /usr/bin/ssh-bak/scp.bak
cp -arpf /usr/bin/sftp /usr/bin/ssh-bak/sftp.bak
cp -arpf /usr/bin/ssh /usr/bin/ssh-bak/ssh.bak
cp -arpf /usr/bin/ssh-add /usr/bin/ssh-bak/ssh-add.bak
cp -arpf /usr/bin/ssh-agent /usr/bin/ssh-bak/ssh-agent.bak
cp -arpf /usr/bin/ssh-keygen /usr/bin/ssh-bak/ssh-keygen.bak
cp -arpf /usr/bin/ssh-keyscan /usr/bin/ssh-bak/ssh-keyscan.bak
mkdir /usr/sbin/ssh-bak
cp -arpf /usr/sbin/sshd /usr/sbin/ssh-bak/sshd.bak

参数和命令解释

  • cp:复制命令,用于将文件或目录从一个位置复制到另一个位置。

  • -a:--archive 选项,表示归档模式,复制文件及其所有属性(如权限、时间戳和符号链接),并递归地复制目录结构。

  • -r:--recursive 选项,递归复制目录(对于单个文件这里不是必须的,但常常与 -a 一起使用)。

  • -p:--preserve 选项,保留文件的权限、所有权和时间戳等属性(此选项已被 -a 包含,但可额外加上以确保属性不被忽略)。

  • -f:--force 选项,如果目标文件已存在则强制覆盖。


替换新版本ssh

cp -arpf /usr/local/openssh-9.9p1/bin/* /usr/bin/
cp -arpf /usr/local/openssh-9.9p1/sbin/*   /usr/sbin/

修改配置文件

vi /etc/ssh/sshd_config
PermitRootLogin yes #允许root密码登录

重启SSH服务以应用更改。

systemctl daemon-reload
sudo systemctl restart ssh

验证OpenSSH版本是否已升级至最新版本。

ssh -V

成功

回退版本

只需将上面的bak复制回去即可

cp -arpf /usr/bin/ssh-bak/scp.bak  /usr/bin/scp
cp -arpf /usr/bin/ssh-bak/sftp.bak /usr/bin/sftp
cp -arpf /usr/bin/ssh-bak/ssh.bak /usr/bin/ssh
cp -arpf /usr/bin/ssh-bak/ssh-add.bak /usr/bin/ssh-add
cp -arpf /usr/bin/ssh-bak/ssh-agent.bak /usr/bin/ssh-agent
cp -arpf /usr/bin/ssh-bak/ssh-keygen.bak /usr/bin/ssh-keygen
cp -arpf /usr/bin/ssh-bak/ssh-keyscan.bak /usr/bin/ssh-keyscan
cp -arpf /usr/sbin/ssh-bak/sshd.bak /usr/sbin/sshd


systemctl daemon-reload
systemctl restart ssh

升级完成请关掉telnet服务

sudo systemctl stop telnet
sudo systemctl disable telnet
sudo systemctl stop xinetd 
sudo systemctl disable xinetd

二、centos

一、默认情况下,linux操作系统我们都是通过ssh进行远程操作,开启telnet一般是在升级ssh的时候需要,开启telnet是为了防止升级ssh之后,无法通过ssh登录系统,可用telnet登录。

关闭防火墙

systemctl stop firewalld.service

systemctl disable firewalld.service

关闭selinux

sed -i 's/enforcing/disabled/' /etc/selinux/config  #永久

setenforce 0  # 临时 

1.在centos7中telnet客户端是默认安装了的,但是telnet-server与xinetd是没有安装的。需要我们去自己安装。

yum install telnet-server xinetd

2.由于telnet服务也是由xinetd守护的,所以安装完telnet-server,要启动telnet服务就必须重新启动xinetd 。

xinetd即extended internet daemon,xinetd是新一代的网络守护进程服务程序,又叫超级Internet服务器。经常用来管理多种轻量级Internet服务。telnet服务就是通过xinetd服务来管理的,所以在安装telnet服务之前需要先安装xinetd服务。

3.开启服务

systemctl start telnet.socket xinetd  #启动服务

systemctl enable xinetd telnet.socket #命令将telnet服务设置为开机自动启动

4.检查23端口是否存在

5.此时还无法使用root登录,会提示登录错误。因为默认root无法远程访问。还需要修改/etc/securetty文件。

普通用户登录可以不添加以下内容,进入服务器在提权。

在末尾添加以下内容:

cp /etc/securetty /etc/securetty.bak #先备份

vi /etc/securetty #追加以下内容

pts/0
pts/1

6.测试验证

成功登录

由于当前版本有漏洞风险,需要升级到openssh-8.6p1

ssh -V #查看当前版本

二、安装openssh编译时需要的依赖

yum clean #清理缓存
yum install gcc zlib-devel openssl-devel pam-devel libselinux-devel  -y  #在线安装依赖


yum install --downloadonly --downloaddir=/openssh-yilai/ gcc zlib-devel openssl-devel pam-devel libselinux-devel #离线下载相关rpm依赖不安装
rpm -ivh *.rpm

7.关闭当前ssh服务(要确保telnet能够登录并操作才停止次服务哈)**

systemctl stop sshd

8.备份ssh(非常重要,请严格执行)

mv /etc/ssh /etc/ssh.bak

mv /usr/bin/ssh /usr/bin/ssh.bak

mv /usr/sbin/sshd /usr/sbin/sshd.bak

mv /usr/lib/systemd/system/sshd.service /usr/lib/systemd/system/sshd.service.bak

9.编译译安装

cd /opt

wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.6p1.tar.gz

cd /opt && tar -zxvf openssh-8.6p1.tar.gz

chown root:root /opt/openssh-8.6p1 -R

cd /opt/openssh-8.6p1

./configure --prefix=/usr --sysconfdir=/etc/ssh --with-md5-passwords --with-pam --with-zlib --with-tcp-wrappers --with-ssl-dir=/usr/local/ssl --without-hardening

make && make install

10.如下表示编译成功

11.授权

chmod 600 /etc/ssh/ssh_host_rsa_key /etc/ssh/ssh_host_ecdsa_key /etc/ssh/ssh_host_ed25519_key

12.复制配置文件并设置允许root用户远程登录

cd /opt/openssh-8.6p1

cp -a contrib/redhat/sshd.init  /etc/init.d/sshd

cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam

chmod u+x /etc/init.d/sshd

13.修改ssh配置

vim /etc/ssh/sshd_config 

PermitRootLogin yes

PasswordAuthentication yes

UseDNS no

14.设置开机自启

chkconfig --add sshd

chkconfig sshd on

15.重启ssh服务

systemctl daemon-reload

systemctl restart sshd

16.验证

[root@k8s-master opt]# ssh -V

OpenSSH_8.6p1, OpenSSL 1.0.2k-fips  26 Jan 2017

17.成功后就可关闭telnet服务

systemctl stop xinetd.service与systemctl stop telnet.socket

systemctl disable xinetd.service与systemctl disable telnet.socket

版本回退

[root@k8s-master ~]# ssh -V

OpenSSH_8.6p1, OpenSSL 1.0.2k-fips  26 Jan 2017

19.回滚操作:

rm -rf /etc/ssh

mv /etc/ssh.bak /etc/ssh 

mv /usr/bin/ssh.bak /usr/bin/ssh 

mv /usr/sbin/sshd.bak /usr/sbin/sshd 

systemctl restart sshd

报错:

处理

chmod 0600 /etc/ssh/ssh_host_ed25519_key

20.回滚后:

[root@localhost etc]# ssh -V

OpenSSH_7.4p1, OpenSSL 1.0.2k-fips 26 Jan 2017