使用SSH私钥登陆服务器
# 背景 一直以来我登录服务器都是直接输账号密码登录的,我觉得密码都设成我的通用密码,用户名也是一样的特别方便,很好奇为什么非要使用私钥登陆,一个文件又不如键盘里输一下密码方便,也很好奇为什么AWS必须要使用密钥登陆,禁止密码登陆,今天我可算是体验到了为什…
# 背景
一直以来我登录服务器都是直接输账号密码登录的,我觉得密码都设成我的通用密码,用户名也是一样的特别方便,很好奇为什么非要使用私钥登陆,一个文件又不如键盘里输一下密码方便,也很好奇为什么AWS必须要使用密钥登陆,禁止密码登陆,今天我可算是体验到了为什么要使用SSH密钥登陆的原因
好处
- SSH密钥登陆更安全一些:绝大多数的破解入侵都是因为弱口令,而密码自然很容易被猜到,但是如果是一长串密钥,当然就不那么容易被破解入侵了
- SSH密钥更方便:可以实现免密登陆,而且很安全无感
这两点是我目前感受到的最好的两点了
设置SSH密钥登陆
形象的来讲,使用SSH密钥登陆服务器,就相当于是
- 你在本地做了一把锁(公钥)和一把钥匙(私钥)
- 你把锁(公钥)传到了服务器上去,从而只能使用你本地保存的私钥去解锁这把锁
在客户端创建SSH密钥
打开自己的终端,输入ssh-keygen
创建你本机客户端的SSH密钥
过程中应该会询问你加密算法使用什么,默认RSA算法即可,还有问你要不要设置一个口令密码,这个就看个人了,我反正没设置,因为嫌麻烦哈哈哈
执行完成后,应该就会在你当前用户的home目录下创建一个文件夹叫做.ssh
,这个文件夹里就有几个文件,最重要的就是id_rsa
和id_rsa.pub
这两个文件了
如果有了这两个文件就表明你已经完成了这一步
将你的公钥上传到你需要连接的服务器上去
使用ssh-copy-id
命令,将你的锁上传到服务器上去
在终端里执行
1 | 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输密码的话似乎不能直接保存密码,真难受)