写项目每次上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密钥也可用来链接其它服务器。流程大致如下:文章来源:https://uudwc.com/A/0LnA
- 配置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
登录服务器。
结束语
码字不易,如果我的文章对你有帮助的话的话欢迎点赞收藏评论转发支持,这将对我意义重大!有任何问题和建议也请第一时间与我分享!文章来源地址https://uudwc.com/A/0LnA