文章背景

openssh分为client端和server端,笔者新装置的Ubuntu 20.04.03 LTS Desktop零碎,默认状况下仅装置了client,笔者想要装置server供近程主机拜访,同时为了进步安全性,批改默认的22监听端口,并应用ED25519公钥算法进行登录验证。

文章指标

  1. 在污浊的Ubuntu零碎中,装置ssh server;
  2. 将ssh服务默认的22端口,改为其余端口;
  3. 开启ubuntu自带的ufw(Uncomplicated FireWall),放行ssh server端口;
  4. 设置 SSH 通过 ED25519 公钥身份验证并禁止明码身份验证。

零碎环境

OSUbuntu 20.04.3 LTS Desktop新装置的Ubuntu桌面零碎
SSHOpenSSH_8.2p1Ubuntu-4ubuntu0.3, OpenSSL 1.1.1f 31 Mar 2020

具体步骤

1. 装置启动ssh server

应用快捷键 ctrl+alt+T ,关上命令行界面,输出上面的命令,装置ssh server客户端。

sudo apt updatesudo apt install openssh-server

装置实现后,ssh server曾经主动启动了,能够用上面的命令查看ssh server的运行状况。

sudo systemctl status ssh

笔者的服务器上输入了以下内容,这示意ssh server处于active(running)运行状态。

2. 批改默认端口

ssh server的默认端口为22端口,咱们能够在其配置文件 /etc/ssh/sshd_config 中(PS:ssh_config是ssh client的配置文件,sshd_config是ssh server的配置文件),对端口进行批改。

sudo vim /etc/ssh/sshd_config

文件内容如下,默认端口 #Port 22 ,咱们输出咱们想要的端口 Port 30022

配置文件批改实现,重启ssh服务。

service ssh restart

看一看配置是不是失效了?

sudo systemctl status ssh

sudo netstat -ntlp | grep ssh    1. -l或–listening 显示监控中的服务器的Socket    2. -t或–tcp 显示TCP传输协定的连线情况    3. -n或–numeric 间接应用IP地址,而不通过域名服务器    4. -p或–programs 显示正在应用Socket的程序识别码和程序名称

3. 凋谢服务器防火墙端口

UFW(Uncomplicated FireWall)是Ubuntu零碎上的默认防火墙。咱们须要设置UFW放行第2步中的端口,这样近程服务器才能够拜访。
首先,咱们看看UFW的运行状态,这里倡议如果ufw处于未激活状态,读者手动将其关上。

sudo ufw statussudo ufw enable

而后,咱们须要放行ssh端口。

sudo ufw allow your-port

实现!再次查看ufw的防火墙规定,会发现端口曾经胜利放行了

sudo ufw status

此时,咱们曾经能够应用ssh客户端在近程应用明码拜访服务器了!

笔者应用收费的 教育版Xshell和Xftp 来拜访服务器。
这里提供 教育版Xshell和Xftp 下载的办法,读者能够自行下载(须要提供邮箱,下载链接在邮箱中)。
读者能够应用本人习惯喜爱的ssh工具。

4. 设置应用密钥登陆ssh server

在第3步,咱们通过用户和明码拜访近程服务器。
事实上这是十分不平安的,即便咱们在第2步中批改了默认的端口,也是不足够的。
不晓得读者的零碎用户名是什么,root 吗,哈哈哈。
不做任何安全措施,对咱们的服务器来说,是十分危险的。
面临这样的问题,笔者抉择应用密钥登陆拜访ssh。

抉择公钥身份验证而不是明码身份验证的最重要起因是为了阻止可能的暴力破解攻打。读者应该防止应用明码,因为明码是可预测的,而且不可避免的很软弱。

密钥模式登录的原理是利用密钥生成器制作一对密钥——一个公钥和一个私钥。将公钥增加到服务器的某个账户上,而后在客户端利用私钥即可实现认证并登录。这样一来,没有私钥,任何人都无奈通过 SSH 暴力破解你的明码来近程登录到零碎。
读者如果对具体细节感兴趣的话,能够理解 非对称公钥明码算法

SSH协定能够生成DSA、RSA、ECDSA和Ed25519密钥对。
笔者倡议应用 RSA (ssh默认应用的公钥算法,经典算法,兼容性强,应用宽泛)和 Ed25519 椭圆曲线算法(效率高,安全性高)中的一种。笔者实际中抉择的是 Ed25519 算法。

咱们在ssh server所在的服务器上,应用上面的命令生成一对Ed25519公私钥对。

ssh-keygen -a 256 -t ed25519    1. -a 256平安强度    2. -t 抉择算法,dsa | ecdsa | ecdsa-sk | ed25519 | ed25519-sk | rsa ,‘-sk’的两个算法请漠视,须要平安固件

上图中,程序提醒咱们是否在 /home/$USER/.ssh/id_ed25519 存储咱们的密钥(私钥文件id_ed25519,公钥文件id_ed25519.pub),两次输出拜访应用私钥的明码 passphrase ,胜利则输入公钥(?)的 SHA256 fingerprint 和 randomart image 。

当初咱们曾经能够在 /home/$USER/.ssh/id_ed25519 看到两个密钥的文件。
执行下列命令,复制公钥文件,命名为 “authorized_keys” 。

cat /home/$USER/.ssh/id_ed25519.pub > /home/$USER/.ssh/authorized_keys

接下来咱们须要设置上面几个文件的权限,以保障密钥平安和程序正确。

chmod 700 ~/.sshchmod 400 ~/.ssh/id_ed25519 chmod 600 ~/.ssh/authorized_keys

妥善保留 id_ed25519私钥文件 ,默认配置状况下,咱们曾经能够在客户机应用私钥和私钥明码近程拜访ssh server。

无论失败或者胜利,咱们都须要进入ssh server的配置文件,查看上面的三个相干配置。

sudo vim /etc/ssh/sshd_config
# 是否容许公钥身份验证,默认为yes#PubkeyAuthentication yes# 认证公钥文件,默认状况就是咱们之前所做的那样#AuthorizedKeysFile     .ssh/authorized_keys .ssh/authorized_keys2#是否容许明码身份验证,默认为yes,当咱们应用密钥能够胜利登陆后,改为noPasswordAuthentication no

此时咱们曾经能够应用私钥身份验证拜访ssh server,并且禁止了软弱的明码身份验证!!

致谢

  1. 如何在Ubuntu 20.04上启用SSH
  2. ssh配置文件ssh_config和sshd_config区别
  3. 启动、敞开和设置ubuntu防火墙 ufw 的应用
  4. 设置 SSH 通过密钥登录
  5. How to secure your SSH server with public key Ed25519 Elliptic Curve Cryptography
  6. Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
  7. Linux chown 命令
  8. Linux如何查看所有的用户和组信息