共计 3002 个字符,预计需要花费 8 分钟才能阅读完成。
文章背景
openssh 分为 client 端和 server 端,笔者新装置的 Ubuntu 20.04.03 LTS Desktop 零碎,默认状况下仅装置了 client,笔者想要装置 server 供近程主机拜访,同时为了进步安全性,批改默认的 22 监听端口,并应用 ED25519 公钥算法进行登录验证。
文章指标
- 在污浊的 Ubuntu 零碎中,装置 ssh server;
- 将 ssh 服务默认的 22 端口,改为其余端口;
- 开启 ubuntu 自带的 ufw(Uncomplicated FireWall),放行 ssh server 端口;
- 设置 SSH 通过 ED25519 公钥身份验证并禁止明码身份验证。
零碎环境
OS | Ubuntu 20.04.3 LTS Desktop | 新装置的 Ubuntu 桌面零碎 |
SSH | OpenSSH_8.2p1 | Ubuntu-4ubuntu0.3, OpenSSL 1.1.1f 31 Mar 2020 |
具体步骤
1. 装置启动 ssh server
应用快捷键 ctrl+alt+T
,关上命令行界面,输出上面的命令,装置 ssh server 客户端。
sudo apt update
sudo 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 status
sudo 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 ~/.ssh
chmod 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,当咱们应用密钥能够胜利登陆后,改为 no
PasswordAuthentication no
此时咱们曾经能够应用私钥身份验证拜访 ssh server,并且禁止了软弱的明码身份验证!!
致谢
- 如何在 Ubuntu 20.04 上启用 SSH
- ssh 配置文件 ssh_config 和 sshd_config 区别
- 启动、敞开和设置 ubuntu 防火墙 ufw 的应用
- 设置 SSH 通过密钥登录
- How to secure your SSH server with public key Ed25519 Elliptic Curve Cryptography
- Linux 权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755)
- Linux chown 命令
- Linux 如何查看所有的用户和组信息