Introduction To SSH
SSH (Secure Shell) 安全外壳协议,使用非对称加密算法和22号端口,可以让我们安全地访问远程主机。传统的远程协议如 Telnet,以未经加密的明文形式在互联网上传输数据,这是 Telnet 最大的安全问题。
几乎所有的 Linux 系统都支持 SSH 协议,Windows 系统如果不支持 SSH,可以安装一些支持 SSH 的第三方应用,比如安装 Git,会自带一个 Git Bash,它在 Windows 上实现了很多的 Linux 命令,包括 ssh 在内。
有了 ssh,我们就可以在 terminal 或者是命令行下访问远程主机了。比如访问 Linux 服务器,或者是在同一局域网下访问树莓派。
ssh 访问远程主机一般包括两种方法,一种是使用密码访问,还有一种是使用密钥访问(推荐)。
密码访问
命令:ssh username@IP_address
,执行命令后,ssh 会要求我们输入远程用户的密码,密码通过后可以进行后续操作。
1 | $ ssh [email protected] |
密钥访问
生成密钥
使用密钥访问首先要生成密钥。Linux 和 Git bash 中生成密钥的命令是一样的。
命令 ssh-keygen -t rsa -b 4096 -C "[email protected]"
-t rsa
指定生成 RSA 类型的密钥。-b 4096
指定密钥长度为 4096 位。-C
指定电子邮件,用于标识密钥对。- 命令中没有指定密钥生成后保存的路径,则使用默认路径 —— 当前用户的 home 文件夹下,Windows 上一般就是
C:\Users\Your_username\.ssh\
。Linux 上一般是/home/Your_username/.ssh/
。 - 因为我之前已经生成过了一次密钥且正在使用中,所以我这里指定一个密钥保存的路径,使用
-f
参数来指定保存路径:ssh-keygen -t rsa -b 4096 -C "[email protected]" -f "/d/.ssh/my_rsa"
提示输入 passphrase ,这个东西是使用密钥的时候需要输入密码。当你的机器有多人使用时,你可以指定这个密码,每次使用密钥的时候需要输入密码才能使用,这算是额外的一道安全防线。如果你的机器就你自己使用,passphrase 这里什么都不输入。1
2
3$ ssh-keygen -t rsa -b 4096 -C "[email protected]" -f "/d/.ssh/my_rsa"
Generating public/private rsa key pair.
Enter passphrase for "/d/.ssh/my_rsa" (empty for no passphrase):
1 | $ ssh-keygen -t rsa -b 4096 -C "[email protected]" -f "/d/.ssh/my_rsa" |
密钥生成的路径是 D:\.ssh\
,包含了两个文件,my_rsa
和 my_rsa.pub
。前者是私钥文件,后者.pub
是公钥文件。(默认名是 id_rsa
、id_rsa.pub
)
1 | $ ls /d/.ssh |
远程主机配置公钥
如果是云服务器,有两种方法配置服务器的公钥,一种是在云服务器供应商的控制台界面,比较简单,鼠标点击操作即可。还有一种方法就是编辑 ~/.ssh/authorized_keys
文件。
使用 vim 编辑:(vim 教程网上有很多。)
1 | /home/ubuntu/.ssh# vim authorized_keys |
将 id_rsa.pub
公钥文件里面的内容复制进去,保存即可。
使用私钥进行远程
远程主机配置完成公钥以后,那么就可以使用 ssh 进行登陆了。
ubuntu 的服务器用户名一般就是 ubuntu:ssh -i ./my_rsa ubuntu@IP_address
树莓派的用户名一般就是 pi :ssh -i ./my_rsa pi@IP_address
-i
指定使用的私钥。- 登陆时输入私钥的 passphrase 密码。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31/d/.ssh
$ ssh -i ./my_rsa [email protected]
Enter passphrase for key './my_rsa':
Welcome to Ubuntu 24.04 LTS (GNU/Linux 6.8.0-40-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
System information as of Tue Nov 26 12:23:57 PM CST 2024
System load: 0.0 Processes: 127
Usage of /: 9.3% of 58.94GB Users logged in: 0
Memory usage: 11% IPv4 address for eth0: 10.0.0.17
Swap usage: 0%
* Strictly confined Kubernetes makes edge and IoT secure. Learn how MicroK8s
just raised the bar for easy, resilient and secure K8s cluster deployment.
https://ubuntu.com/engage/secure-kubernetes-at-the-edge
Expanded Security Maintenance for Applications is not enabled.
222 updates can be applied immediately.
To see these additional updates run: apt list --upgradable
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
Last login: Tue Nov 26 12:16:42 2024 from xxx.xxx.xxx.xxx
一个主机可以配置两个公钥,使用不同的私钥进行远程。如果配置两个公钥,编辑 ~/.ssh/authorized_keys
文件,每个公钥独占一行。
关于数字加密
- 密码:对文本进行编码,使偷窥者无法识别的算法。
- 密钥:改变密码行为的数字化参数。
- 对称密钥加密系统:编 / 解码使用相同密钥的算法。
- 非对称密钥加密系统:编 / 解码使用不同密钥的算法。
- 公开密钥加密系统:一种能够使数百万计算机便捷地发送机密报文的系统。
- 数字签名:用来验证报文未被伪造或篡改的校验和。
- 数字证书:由一个可信的组织验证和签发的识别信息。
世界上有两种密码:一种是防止小孩偷看你的文件;另一种是防止当局阅读你的文件。
如果把一封信锁在保险柜中,把保险柜隐藏在纽约的某个地方,然后告诉你去看这封信,这并不是安全,而是隐藏。相反,如果把一封信锁在保险柜中,然后把保险柜及其设计规范和许多同样的保险柜给你,以便你和世界上最好的开保险柜的专家能够研究锁的装置,而你还是无法打开保险柜去读这封信,这才是安全的概念。
非对称加密技术正是这样一种能够满足这种安全需求的加密方式。它使用一对密钥——公钥和私钥——来进行加密和解密操作。公钥可以公开给任何人,用于加密信息或验证数字签名;而私钥则必须保密,只有持有私钥的人才能解密信息或创建有效的数字签名。
在非对称加密中,即使公钥被泄露或公开,由于私钥的保密性和复杂性,攻击者仍然无法轻易解密信息。同时,由于非对称加密算法通常基于复杂的数学难题(如大数分解、离散对数问题等),这些难题在目前的计算条件下难以被破解,从而确保了信息的安全性。
因此,非对称加密技术不仅提供了信息隐藏的功能(通过加密信息),更重要的是它确保了信息在面临潜在威胁时的机密性和完整性。
在 SSH 远程连接中使用了 非对称加密算法,加密和解密使用不同的密钥,即公钥和私钥,公钥是可以公开的,但是只有用私钥才能解密与之对应的公钥加密的内容。
非对称加密算法在 HTTP/SSL/TLS 中也有应用。在SSL/TLS握手过程中,客户端和服务器会使用非对称加密来安全地交换对称加密的密钥(即会话密钥)。这个过程中,服务器会将其非对称加密的公钥(包含在SSL/TLS证书中)发送给客户端,客户端使用此公钥来加密一个随机生成的对称密钥,并将其发送回服务器。由于只有服务器拥有与该公钥匹配的私钥,因此服务器能够解密这个对称密钥,之后双方就可以使用这个对称密钥来进行加密通信了。
非对称加密的主要算法包括:
RSA:由Rivest、Shamir和Adleman三位科学家提出,是目前应用最广泛的非对称加密算法。RSA的安全性基于大数分解的困难性,即给定一个大整数,很难确定其质因数。
Elgamal:另一种常用的非对称加密算法,其安全性基于离散对数问题的困难性。
ECC(椭圆曲线加密算法):利用椭圆曲线上的点进行加密和解密操作,相比RSA等算法,ECC在相同的安全强度下可以使用更短的密钥长度。
其他算法:如背包算法、Rabin算法、D-H算法等,这些算法在某些特定场景或领域也有应用。
传送门:shodan.io
END