SSH 和 Git
了解SSH
SSH 以非对称加密实现身份验证。较常用的非对称加密有 RSA。
两种加密过程:
1、通过用户名密码访问服务器,即使传输的数据是加密的也可能会被劫持到不信任的服务器,泄露用户名和密码。
2、通过将公钥(用来加密和认证客户端)放到信任的服务器上来和服务器传输密文。
两张丑图大概解释一下。
可以明显看到第二图的漏洞,劫持 公钥后就可以肆无忌惮的发送信息给服务器了,所以一般情况下会有一个认证中心服务器,客户端需要持有认证中心的公钥来发送密文,认证中心再持有所有服务器的公钥来分发请求。
参考:维基百科SSh
使用 OpenSSH 和 Putty。
使用 OpenSSH 生成用于git 的密钥。
打开 git bash 如果没有的话 添加 C:\Windows\System32\OpenSSH 到环境变量
ls -al ~/.ssh 列出目录 或直接打开 C:\Users\电脑用户名\.ssh
-A | 列示所有条目,除了 .(点)和 ..(点-点)。 |
-a | 列示目录中所有条目,包括以 .(点)开始的条目。 |
L | 列示链接引用的文件或目录内容。这是缺省操作。后跟符号链接。如果使用 -l 选项,-N 选项就成为缺省值,不后跟符号链接。当使用 -l 选项时,仅有 -L 选项能够覆盖 -N 缺省值。 |
-l | (L 的小写)显示方式、链接数目、所有者、组、大小(按字节)和每个文件最近一次修改时间。如果文件是特殊文件,大小字段包含主要和次要设备数目。如果最近一次修改时间大于六个月之前,时间字段以 月份 日期 年份的格式显示,然而六个月内修改的文件以 月份 日期 时间 的格式显示。
如果文件是符号链接,打印所链接到的文件的路径名,其前跟 ->。显示符号链接的属性。-n、-g、和 -o 标志覆盖 -l 标志。 |
ssh-keygen -t rsa -C "Comment" 生成rsa密钥对
Comment 可以填你的邮件或日期等其他注释
ssh-add ~/.ssh/id_rsa 添加密钥到ssh-agent缓存中
如果失败可以先执行一下 ssh-agent bash 命令。
ssh-agent就是一个密钥管理器,运行ssh-agent以后,使用ssh-add将私钥交给ssh-agent保管,注意这是临时的。
手动拷贝公钥(id_rsa.pub 文件的内容)到服务器上 pbcopy < ~/.ssh/id_rsa.pub
github 或 gitlab 等账户设置里 ssh 选项 add key 就行了。
输入 ssh git@github.com 测试。
使用 git 工具克隆代码
如果没有成功会提示:
Disconnected: No supported authentication methods available (server sent: publickey)
sourcetree、Git Extensions 、命令行工具都行。
Putty 认证代理
下载 Git Extensions 最新版 安装的时候勾选 putty。
功能简介:生成密钥对(虚拟文件)、转换 OPenSSh 密钥对、认证代理(ssh-agent 、ssh-add)。
其他类似。
补充1、每次要打开认证代理并添加私钥才能与服务器交互
比如git 推送的时候打开了代理没有添加私钥 提示
fatal: protocol error: bad line length character: Usin