SSH

定义

Secure Shell (SSH) 安全外壳协议,是一个允许两台电脑之间通过安全的连接进行数据交换的网络协议。通过加密保证了数据的保密性和完整性。

SSH专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

结构

SSH由客户端 和 服务端软件构成。
服务端是一个守护进程(daemon),在后台运行并响应来自客户端的链接请求。服务端一般是sshd进程,提供对远程连接的处理,一般包括公共密钥认证、密钥交换、对称密钥、非安全连接等。
客户端包含:ssh程序、scp(远程拷贝)、sftp(安全文件传输)等其他应用程序。

从客户端来看,SSH提供两种级别的安全验证。

第一种:基于口令的安全验证
使用自己的账号和口令,可以登入到远程主机。

第二种:基于秘钥的安全验证
创建一对秘钥,并把公有秘钥放在需要访问的服务器上。

1、如果需要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密钥进行安全验证。 2、服务器接收到请求后,在你的主目录下寻找你的公有秘钥,然后和发送过来的公有密钥做对比。如果一致,则用公有密钥加密”质询“(challenge)并发送给客户端软件。 3、客户端收到”质询“后,可以用私人密钥解密再把它发送给服务器。服务端再次验证,如果确认,则简历传输链接。

例子

举个例子:SFTP

SFTP:SSH文件传输协议,基于SSH的FTP。传统的ftp在网络中是明文传输数据,容易被中间人攻击,而SFTP则不存在这个问题。
SFTP 使用口令的方式进行安全认证,认证成功后,可以进行数据传输。
举个例子:登入跳板机
使用口令的方式进行安全认证,认证成功后,可以远程在跳板机进行操作。

SSH与Git

Git的文件传输使用了SSH协议,每次pull、push代码需要输入github账号和密码。实际上,电脑第一使用git时,会设置密钥。即git使用密钥的验证方式,设置好密钥后,进行远程的代码操作时,就不需要输入账号和密码了。

密钥生成

密钥主要是放在 ~/.ssh目录下

  1. $cd ~/.ssh # 必须进入改目录下进行操作
  2. $ssh-keygen -t rsa -C 'xxx@gmail.com'
  3. #注意第一个回车时,输入密钥名称
  4. >>Enter file in which to save the key (/home/sankuai/.ssh/id_rsa): id_rsa_abc
  5. $ ls # 可以发现生成新的密钥
  6. id_rsa_abc id_rsa_abc.pub
  7. # id_rsa_abc.pub 是公有密钥
  8. #id_rsa_abc 是私有密钥
  9. #config中配置密钥

config配置形式如下:

  1. Host my
  2. HostName github.com
  3. User git
  4. IdentityFile ~/.ssh/id_rsa_abc

config参考如下:
image.png
其他:添加私有密钥,ssh-add ~/.ssh/idrsa

公有密钥设置

Git可以在个人账号的setting->SSH and GPG keys中设置SSH keys。(注意是公有密钥)git网站相当于是服务器。
image.png

多个SSH管理

按照上述过程,生成密钥,并在config中配置。

什么情况下有多个SSH?

登入公司内部的git 和 公共github,分别需要使用不同的密钥,因为服务器不一样。

参考

SSH key的介绍与在Git中的使用
SSH文件传输协议
多个SSHkey管理