SSH
1. SSH简介
SSH是(Secure Shell Protocol)的简写 ,是网络应用层协议。目的是为远程登录会话和其他网络服务提供安全性的协议。
2. 主要功能
传统的网络服务程序,如:ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而且,这些服务程序的安全验证方式也是有其弱点的, 就是很容易受到“中间人”(man-in-the-middle)这种方式的攻击。所谓“中间人”的攻击方式, 就是“中间人”冒充真正的服务器接收你传给服务器的数据,然后再冒充你把数据传给真正的服务器。服务器和你之间的数据传送被“中间人”一转手做了手脚之后,就会出现很严重的问题。通过使用SSH,你可以把所有传输的数据进行加密,这样"中间人"这种攻击方式就不可能实现了,而且也能够防止DNS欺骗和IP欺骗。使用SSH,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的[速度。SSH有很多功能,它既可以代替Telnet,又可以为FTP、PoP、甚至为PPP提供一个安全的"通道" 。
3. 认证方式
3.1 基于口令认证
只要你知道自己帐号和口令,就可以登录到远程主机。所有传输的数据都会被加密,但是不能保证你正在连接的服务器就是你想连接的服务器。可能会有别的服务器在冒充真正的服务器,也就是受到“中间人”这种方式的攻击。
交互流程
- 用户A向远程主机B发送登录请求
- 远程主机B把自己的公钥发送给用户A
- 用户A使用B的公钥加密用户名和密码,发送给远程主机B验证
- 远程主机B用自己的私钥进行解密登录的用户名和密码,如果正确,就同意用户登录。
如果你是第一次登录对方主机,系统会出现下面的提示:
$ ssh user@host
The authenticity of host 'host (12.18.429.21)' can't be established.
RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
Are you sure you want to continue connecting (yes/no)?
这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0 : de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
如果输入yes后,会出现下面信息:
Warning: Permanently added 'ssh-server.example.com,12.18.429.21' (RSA) to the list of known hosts.
Password: (enter password)
如果密码正确,就可以登录了。
当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts
之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
3.2 基于公钥认证
用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
交互流程
- 用户A将自己的公钥存储在远程主机B上
- 用户A向远程主机B发送登录请求
- 远程主机B用A的公钥加密一段随机字符串,发送给A
- 用户A用自己的私钥解密后,再将此字符串和sessionKey通过MD5生成摘要Digest1,再发送给远程主机B
- 远程主机B将随机字符串和sessionKey通过MD5生成摘要Digest2,比对用户A发送过来的摘要A是否一致。如果一致,直接允许登录shell,不再需要密码。
实际操作
-
生成公钥和私钥
ssh-keygen -t rsa -f ~/.ssh/id_rsa
参数说明:
-f 选项指定密钥文件路径
-t 选项指定加密算法(rsa、dsa、ecdsa等)
-b 选项指定密钥长度
-N 选项指定密钥口令
-C 选项指定注释
-
将客户端生成的公钥发送给远程服务器
ssh-copy-id username@ip_address
将生成的id_rsa.pub公钥中的内容远程写入到IP对应主机的.ssh/authorized_keys 文件中
如果IP是本机,就是在本机也会生成一个.ssh/authorized_keys 文件中
-
此时即可免密登录远程主机
ssh username@ip_address
四个重要文件说明
1.id_rsa:保存私钥
2.id_rsa.pub:保存公钥
3.authorized_keys:保存已授权的客户端公钥
4.known_hosts:保存已认证的远程主机ID
4. 安装SSH
apt install openssh-sever
systemctl status ssh # 查看服务状态
ufw allow ssh # 防火墙打开ssh端口
一些常用命令
systemctl disable --now ssh # 禁止ssh
systemctl enable --now ssh # 重启ssh
cat .ssh/id_rsa.pub >> .ssh/authorized_keys #将本机公钥保持到授权文件中
chmod 600 .ssh/authorized_keys
ssh-copy-id -i .ssh/id_rsa.pub username@192.168.x.xxx