SSH 为 Secure Shell 的缩写,SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。

ssh简介

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

ssh-keygen
## Generating a new SSH key pair:
ssh-keygen -t rsa -C "your.email@example.com" -b 4096

# -t rsa:t是type的缩写:

# -t即指定密钥的类型,密钥的类型有两种,一种是RSA,一种是DSA:
# RSA:RSA加密算法是一种非对称加密算法,是由三个麻省理工的牛人弄出来的,RSA是他们三个人姓的开头首字母组合。
# DSA:Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种。
# 为了让两个linux机器之间使用ssh不需要用户名和密码。所以采用了数字签名RSA或者DSA来完成这个操作。ssh-keygen默认使用rsa密钥,所以不加-t rsa也行,如果你想生成dsa密钥,就需要加参数-t dsa。

# -b 4096:b是bit的缩写
# -b 指定密钥长度。对于RSA密钥,最小要求768位,默认是2048位。命令中的4096指的是RSA密钥长度为4096位。

# -C "邮箱":C是comment的缩写

# -C表示要提供一个新注释,用于识别这个密钥,所以""里面不一定非要填邮箱,可以是任何内容,邮箱仅仅是识别用的key

总结:当你创建ssh的时候:-t 表示密钥的类型 ,-b表示密钥的长度,-C 用于识别这个密钥的注释 ,这个注释你可以输入任何内容,很多网站和软件用这个注释作为密钥的名字。

ssh-add

ssh-add 这个命令不是用来永久性的记住你所使用的私钥的。实际上,它的作用只是把你指定的私钥添加到 ssh-agent 所管理的一个 session 当中。而 ssh-agent 是一个用于存储私钥的临时性的 session 服务,也就是说当你重启之后,ssh-agent 服务也就重置了。

如果是为了永久记住对应的私钥是哪个,我们不能依赖 ssh-agent 服务。

Mac 系统内置了一个 Keychain的服务及其管理程序,可以方便的帮你管理各种秘钥,其中包括 ssh 秘钥。ssh-add 默认将制定的秘钥添加在当前运行的 ssh-agent 服务中,但是你可以改变这个默认行为让它添加到 keychain 服务中,让 Mac来帮你记住、管理并保障这些秘钥的安全性。

你所要做的就是执行下面的命令:

$ ssh-add -K [path/to/your/ssh-key]
# 常规的就是:
$ ssh-add -K ~/.ssh/id_rsa
# 重设密码:
ssh-keygen -p 

# It will then prompt you for a keyfile (defaulted to the correct file for me, ~/.ssh/id_rsa), the old passphrase (enter what you have now) and the new passphrase (enter nothing). 

ssh免密登录

假设要实现从A机器免密登录到B机器。通常A机器是我们的PC,B机器是服务器。 首先,在我们的本机A机器上: 1)在A机器上生成公钥/私钥对 (如果已经存在,则可以直接到下一步)

A:~$ ssh-keygen -t rsa

根据提示,回车即可,提示输入密码时回车即表示空密码。在用户根目录下生成.ssh文件夹,里面包括id_rsa(私钥)和id_rsa.pub(公钥)。

2)将A机器的id_rsa.pub复制到B机器下

A:~$ scp ~/.ssh/id_rsa.pub B@192.168.100.1:~/

这一步还需要输入B机器的密码。

3)在B机器上将A机器的id_rsa.pub添加到B机器的~/.ssh/authorized_keys,并将authorized_keys的权限改成600

# 如果 ~/.ssh文件夹不存在,先执行
B:~$ mkdir .ssh
B:~$ cat id_rsa.pub >> .ssh/authorized_keys
B:~$ chmod 600 ~/.ssh/authorized_keys

现在A机器可免密登陆到B机器上了。

若A机器提示“Agent admitted failure to sign using the key.”,则需要将私钥id_rsa添加到ssh-agent的高速缓存中。

A:~$ ssh-add .ssh/id_rsa

REFERENCE

Generating a new SSH key and adding it to the ssh-agent

ssh免密码登陆及其原理

ssh github