在本地配置SSH并连接到GitHub以及其它服务器(详细图文教程)

写项目每次上GitHub都要用户名密码比较麻烦。那么可以配置SSH授权你的设备无需用户名和密码进行直接连接。

设备

博主展示的方法适用于MacLinux设备。博主使用的操作系统是Ubuntu 18.04 LTS

教程

以下是分步教学,可参考GitHub官网

  1. 确认你还没有设置SSH。打开终端,输入cd ~./ssh(默认目录)或者其它你设置过的ssh目录位置并回车。如果终端返回No such file or directory,那说明你应该新设置一个SSH。
    SSH1
  2. 生成SSH密钥。接下来在终端输入ssh-keygen -t rsa并回车。其中你要按两次回车:第一次让你选择SSH密钥的存储位置,回车表示存在默认位置/home/[用户名]/.ssh/id_rsa;第二次回车时会选择passphrase。passphrase相当于一个可以本地加密你的SSH密钥的密码,防止其他人用你的机器使用SSH。直接回车默认设置passphrase为无,或者可以选择自己的密码。完成后你的SSH密钥就生成好了,输出如下图:
    SSH2
  3. 确认生成SSH密钥。在终端内重新输入步骤一的指令cd ~/.sshls,确认SSH密钥文件已被生成,如下图:
    SSH3
  4. 复制SSH密钥。在执行完步骤三后,在终端输入cat id_rsa.pub获取SSH公共密钥内容。复制ssh-rsa ... @mail.ericfrenzy.fun。最后的邮箱地址是博主当时设置邮箱服务器时生成的。邮箱地址是什么无所谓,只要是自己能认出的邮箱地址就行。
    SSH4
  5. 在GitHub上添加SSH密钥。在设置页面找到SSH and GPG keys,然后点击页面上的New SSH key。然后会出现下方第二张图所示的窗口。在Title处随意填写一个你能认出是你想授权设备的名字,然后把刚才复制的SSH公共密钥复制到下方的文字框内,然后点击Add SSH key
    SSH5.1
    SSH5.1
  6. 测试连接。回到你刚刚的机器打开新的终端,输入ssh -T [email protected]然后回车。接下来跳出一行字不用管,输入yes然后回车。如果最后出现Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.那就说明你的SSH密钥配置成功了!注意:在用如git clone等命令时,要用SSH的URL而不是HTTPS的。
    SSH6

原理

SSH(Secure Shell)协议是一个非常安全的加密和传输协议。它好就好在加密很复杂并且使用非对称密钥加密(所以安全性很高),而且不需要人为记住密码(所以既减少了人为泄露隐私的概率,又让授权变得很方便)。它的加密涉及到一对密钥:公钥和私钥。生成这一对密钥的常见方法有Rivest–Shamir–Adleman (RSA)Elliptic Curve Digital Signature Algorithm (ECDSA)
进行SSH验证的时候,客户端会向服务器发送连接请求。服务器收到后会让客户端提供证书。客户端会使用公钥和私钥生成一个SSH证书,并将其发给服务器。服务器验证通过后会记录用户的公钥。这样,在客户端和服务器传输信息的时候,都会使用公钥加密。私钥的作用除了证明你的身份(只有你的电脑上才会有自己的私钥,所以不要分享给别人),还有就是保证了只有持有密钥的人才能解密用公钥加密的信息。这也是为什么你和GitHub服务器SSH验证通过后就无需再次使用用户名和密码验证。

功能拓展

既然介绍过原理,那么这个方法生成的SSH密钥也可用来链接其它服务器。流程大致如下:

  1. 配置SSH服务器。常见的工具是OpenSSH。在服务器端首先打开终端运行ssh localhost。如果返回connection refused那就说明服务器还没有配置好SSH。那么可以输入sudo apt-get install openssh-server ii.并回车来配置SSH服务器。安装好后输入sudo service ssh status并回车。如果它的状态是loadedactive,那么说明服务器的SSH就配置好了。
  2. 用用户名和密码连接到服务器。如果你已经配置好服务器的SSH或者你想连接到已知的服务器,打开本地的终端输入ssh username@host_ip并回车。其中username是你已经在服务器上注册好的用户名,host_ip是服务器的IP地址。注意,这是使用用户名和密码的连接方法,所以每次你使用这个方法都要重新输入用户名和密码。
  3. 用SSH passphrase连接到服务器。用这种方法你不需要每次登录服务器都输入密码(如果你没有设置passphrase)。首先要把你的公钥上传至服务器。可以使用ssh-copy-idscp,或者手动上传。由于第一种方法最为快捷和方便,这里着重介绍第一种方法。但在这之前,要先生成SSH密钥(参考上方步骤的ssh-keygen -t rsa方法。设置的passphrase就是你用SSH登录需要的密码)。生成好后,在本地终端使用ssh-copy-id username@host_ip命令,其中username是你已经在服务器上注册好的用户名,host_ip是服务器的IP地址。之后输入你在服务器上注册好的用户名的密码(你只需要这一次,因为之后就是使用SSH私钥进行验证了)。输入完成后在客户端终端输入ssh username@host_ip,然后尝试使用passphrase登录服务器。

结束语

码字不易,如果我的文章对你有帮助的话的话欢迎点赞收藏评论转发支持,这将对我意义重大!有任何问题和建议也请第一时间与我分享!

猜你喜欢

转载自blog.csdn.net/EricFrenzy/article/details/126904024