写项目每次上GitHub都要用户名密码比较麻烦。那么可以配置SSH授权你的设备无需用户名和密码进行直接连接。
设备
博主展示的方法适用于Mac 和Linux 设备。博主使用的操作系统是Ubuntu 18.04 LTS 。
教程
以下是分步教学,可参考GitHub官网。
- 确认你还没有设置SSH。打开终端,输入
cd ~./ssh (默认目录)或者其它你设置过的ssh目录位置并回车。如果终端返回No such file or directory ,那说明你应该新设置一个SSH。 - 生成SSH密钥。接下来在终端输入
ssh-keygen -t rsa 并回车。其中你要按两次回车:第一次让你选择SSH密钥的存储位置,回车表示存在默认位置/home/[用户名]/.ssh/id_rsa ;第二次回车时会选择passphrase。passphrase相当于一个可以本地加密你的SSH密钥的密码,防止其他人用你的机器使用SSH。直接回车默认设置passphrase为无,或者可以选择自己的密码。完成后你的SSH密钥就生成好了,输出如下图: - 确认生成SSH密钥。在终端内重新输入步骤一的指令
cd ~/.ssh 和ls ,确认SSH密钥文件已被生成,如下图: - 复制SSH密钥。在执行完步骤三后,在终端输入
cat id_rsa.pub 获取SSH公共密钥内容。复制ssh-rsa ... @mail.ericfrenzy.fun 。最后的邮箱地址是博主当时设置邮箱服务器时生成的。邮箱地址是什么无所谓,只要是自己能认出的邮箱地址就行。 - 在GitHub上添加SSH密钥。在
设置 页面找到SSH and GPG keys ,然后点击页面上的New SSH key 。然后会出现下方第二张图所示的窗口。在Title 处随意填写一个你能认出是你想授权设备的名字,然后把刚才复制的SSH公共密钥复制到下方的文字框内,然后点击Add SSH key 。 - 测试连接。回到你刚刚的机器打开新的终端,输入
ssh -T git@github.com 然后回车。接下来跳出一行字不用管,输入yes 然后回车。如果最后出现Hi xxx! You've successfully authenticated, but GitHub does not provide shell access. 那就说明你的SSH密钥配置成功了!注意:在用如git clone 等命令时,要用SSH的URL而不是HTTPS的。
原理
SSH(Secure Shell)协议是一个非常安全的加密和传输协议。它好就好在加密很复杂并且使用非对称密钥加密(所以安全性很高),而且不需要人为记住密码(所以既减少了人为泄露隐私的概率,又让授权变得很方便)。它的加密涉及到一对密钥:公钥和私钥。生成这一对密钥的常见方法有Rivest–Shamir–Adleman (RSA) 和Elliptic Curve Digital Signature Algorithm (ECDSA) 。 进行SSH验证的时候,客户端会向服务器发送连接请求。服务器收到后会让客户端提供证书。客户端会使用公钥和私钥生成一个SSH证书,并将其发给服务器。服务器验证通过后会记录用户的公钥。这样,在客户端和服务器传输信息的时候,都会使用公钥加密。私钥的作用除了证明你的身份(只有你的电脑上才会有自己的私钥,所以不要分享给别人),还有就是保证了只有持有密钥的人才能解密用公钥加密的信息。这也是为什么你和GitHub服务器SSH验证通过后就无需再次使用用户名和密码验证。
功能拓展
既然介绍过原理,那么这个方法生成的SSH密钥也可用来链接其它服务器。流程大致如下:
- 配置SSH服务器。常见的工具是
OpenSSH 。在服务器端首先打开终端运行ssh localhost 。如果返回connection refused 那就说明服务器还没有配置好SSH。那么可以输入sudo apt-get install openssh-server ii. 并回车来配置SSH服务器。安装好后输入sudo service ssh status 并回车。如果它的状态是loaded 和active ,那么说明服务器的SSH就配置好了。 - 用用户名和密码连接到服务器。如果你已经配置好服务器的SSH或者你想连接到已知的服务器,打开本地的终端输入
ssh username@host_ip 并回车。其中username 是你已经在服务器上注册好的用户名,host_ip 是服务器的IP地址。注意,这是使用用户名和密码的连接方法,所以每次你使用这个方法都要重新输入用户名和密码。 - 用SSH
passphrase 连接到服务器。用这种方法你不需要每次登录服务器都输入密码(如果你没有设置passphrase )。首先要把你的公钥上传至服务器。可以使用ssh-copy-id ,scp ,或者手动上传。由于第一种方法最为快捷和方便,这里着重介绍第一种方法。但在这之前,要先生成SSH密钥(参考上方步骤的ssh-keygen -t rsa 方法。设置的passphrase 就是你用SSH登录需要的密码)。生成好后,在本地终端使用ssh-copy-id username@host_ip 命令,其中username 是你已经在服务器上注册好的用户名,host_ip 是服务器的IP地址。之后输入你在服务器上注册好的用户名的密码(你只需要这一次,因为之后就是使用SSH私钥进行验证了)。输入完成后在客户端终端输入ssh username@host_ip ,然后尝试使用passphrase 登录服务器。
结束语
码字不易,如果我的文章对你有帮助的话的话欢迎点赞收藏评论转发支持,这将对我意义重大!有任何问题和建议也请第一时间与我分享!
|