使用SSH私钥登陆服务器
in 小技巧 with 0 comment

背景

一直以来我登录服务器都是直接输账号密码登录的,我觉得密码都设成我的通用密码,用户名也是一样的特别方便,很好奇为什么非要使用私钥登陆,一个文件又不如键盘里输一下密码方便,也很好奇为什么AWS必须要使用密钥登陆,禁止密码登陆,今天我可算是体验到了为什么要使用SSH密钥登陆的原因

好处

这两点是我目前感受到的最好的两点了

设置SSH密钥登陆

形象的来讲,使用SSH密钥登陆服务器,就相当于是

  1. 你在本地做了一把锁(公钥)和一把钥匙(私钥)
  2. 你把锁(公钥)传到了服务器上去,从而只能使用你本地保存的私钥去解锁这把锁

在客户端创建SSH密钥

打开自己的终端,输入ssh-keygen创建你本机客户端的SSH密钥

过程中应该会询问你加密算法使用什么,默认RSA算法即可,还有问你要不要设置一个口令密码,这个就看个人了,我反正没设置,因为嫌麻烦哈哈哈

执行完成后,应该就会在你当前用户的home目录下创建一个文件夹叫做.ssh,这个文件夹里就有几个文件,最重要的就是id_rsaid_rsa.pub这两个文件了

如果有了这两个文件就表明你已经完成了这一步

将你的公钥上传到你需要连接的服务器上去

使用ssh-copy-id命令,将你的锁上传到服务器上去

在终端里执行

ssh-copy-id ~/.ssh/id_rsa.pub <username>@<server>

这时候应该会问你要服务器密码,进行一边认证,输入就行

这个命令是macOS和Linux自带的命令,可以直接执行,但是如果要是windows该怎么办呢?
其实这个命令就是将你的id_rsa.pub这个文件上传到了远程服务器的你的用户的.ssh目录下,所以如果你的操作系统没有这个命令的话可以使用scp ~/.ssh/id_rsa.pub <username>@<server>:~/.ssh来实现相同的功能

如果服务器本来就禁止密码登陆该怎么办呢?
虽然服务器可能禁止使用密码登陆,看似无法添加公钥,但是在初始化服务器的时候肯定会让你上传你的公钥的,比如AWS在创建服务器的时候就可以上传公钥,Import SSH key这一步,使用文本文档打开客户端上的id_rsa.pub,导入进去,依然可以实现免密登陆

Enjoy

然后你可以登出服务器,直接在终端执行ssh <username>@<server>,你就会直接登录上,很爽快

而且因为你是在本机的.ssh目录保存的你的公钥和私钥,所以别的应用程序也可以访问到你的这个文件,可以用你的钥匙去连接到你的服务器。

比如vscode remote就可以直接连接上,不需要每次在输入密码了(vscode输密码的话似乎不能直接保存密码,真难受)

Responses