SSH 协议实践
SSH概述
类似于HTTP,SSH(Secure Shell)是一种加密的网络传输协议,常用于加密远程登录。
1995年,芬兰赫尔辛基理工大学的塔图·于勒宁因为发现自己学校存在嗅探密码的网络攻击,设计了一套保护信息传输的程序,即Secure
Shell(简称SSH),其目标是取代先前的rlogin
、Telnet
、FTP
、rsh
等安全性不足的协议。如今,最为广泛使用的OpenSSH
便是SSH协议的一种免费开源实现。
基本原理
SSH使用非对称加密算法实现身份验证,即采用公钥-私钥对来进行加密网络连接。私钥由用户(本地主机)自行保管,公钥由远程主机(如:服务器)保管。
应用实践
下面使用OpenSSH
进行具体实践。
SSH协议语法格式
SSH主要用于远程登录,如下所示为SSH协议的语法格式。 1
ssh [<username>@]<server>[:<port>]
关于SSH公钥认证
为实现公钥认证,作为认证的客户端一方需要拥有两个文件,即公钥-私钥对。一般公钥-私钥对文件创建在用户的主目录下的.ssh
目录中。如果用户主目录下不存在.ssh
目录,说明SSH公钥-私钥对尚未创建。
创建公钥-私钥对
1 | $ ssh-keygen |
该命令会在用户主目录下创建.ssh
目录,并在其中创建两个文件:
- id_rsa
:私钥文件。是基于RSA算法创建的。 -
id_rsa.pub
:公钥文件。
分发公钥
创建了公钥-私钥对后,需要将公钥交给远程主机保管,这样才能在之后的登录实现无口令登录。如下命令,会将.ssh
目录下指定的公钥文件拷贝至远程服务器。
1
$ ssh-copy-id -i .ssh/id_rsa.pub <user>@<server>
- 该命令会提示输入用户user在server上的SSH登录口令
- 此命令执行成功后,再以user用户用ssh命令登录server远程主机时,不必输入口令可直接登录
- 该命令实际上是
.ssh/id_rsa.pub
公钥文件拷贝到远程主机server的user主目录下的.ssh/authorized_keys
文件中,内容类似如下:
1 | ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHJu4oVxIbLS2LBH5wI7htvDxuIMZ5IFUaZjbWI8z...M4yGEWcr7OVPdQa4DIEbrrl8MzsAZ baochuquan@baochuquandeMacBoo k-Pro.local |
关于SSH主机别名
在实际应用中,有时需要使用多套公钥/私钥对。然而,上述创建公钥-私钥对的命令只会生成默认名为id_rsa
的密钥对。
创建公钥-私钥对
为了创建不同的公钥/私钥对,在使用ssh-keygen
命令时就需要通过-f
参数指定不同的私钥名称。用法如下:
1
$ ssh-keygen -f ~/.ssh/<filename>
.ssh/
目录下创建指定的公钥/私钥对:文件<filename>
是私钥,文件<filename>.pub
是公钥。
分发公钥
将新生成的公钥添加到远程主机登录用户主目录下的.ssh/authorized_keys
文件中,就可以使用新创建的公钥建立到远程主机1
$ ssh-copy-id -i .ssh/<filename>.pub <user>@<server>
~/.ssh/id_rsa.pub
。那么如何使用新建的公钥连接server呢?
管理本地私钥
SSH的客户端配置文件~/.ssh/config
可以通过创建主机别名,连接主机时选择用指定的私钥。例如/.ssh/config
文件中的下列配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# 使用默认的id_rsa私钥
Host gerrit.zhenguanyu.com
Hostname gerrit.zhenguanyu.com
Port 29418
User baocq
# 使用指定的chuquan01私钥
Host chuquan
user root
hostname 115.28.167.128
port 22
identityfile ~/.ssh/chuquan01
# 使用指定的gerrit01私钥
Host gerrit
user gerrit
hostname 115.28.167.128
port 22
identityfile ~/.ssh/gerrit01
无口令远程登录
执行下面的SSH登录命令,即可登录Host为chuquan
的主机:
1
$ ssh chuquan
(完)
【参考】
1. Secure
Shell
2. SSH原理与运用(一):远程登录
3. SSH原理与运用(二):远程操作与端口转发
4. 《Git权威指南》,蒋鑫