工作中经常需要登录服务器,每次都需要输入服务器登录密码是相当麻烦的,我们可以通过设置RSA密钥对免密码登录。通过本地配置私钥,服务器配置公钥,并且保证私钥不丢失的情况下,服务器可以验证发送方身份唯一,并且报文是未被修改的。
生成一对密钥
打开终端,通过ssh-keygen生成RSA密钥对,-t表示type,表示生成rsa加密的钥匙:
1 | ssh-keygen -t rsa |
RSA是默认的加密类型,默认长度为2048位,可以指定长度为4096更安全:
1 | ssh-keygen -b 4096 -t rsa |
按Enter键,然后需要输入一个密码来加密你的SSH Key.密码至少要20位长度.SSH密钥会保存在home目录下的.ssh/id_rsa文件中.SSH公钥保存在.ssh/id_rsa.pub文件中。这里的id是我们在输入的时候指定的文件名。
配置config文件
1 | cd ~/.ssh |
打开config文件,如果不存在,自己新建一个:
1 | mkfile m config |
当前我本地的config配置为:
1 | Host github.com |
其中stable是我增加的配置项,这里的几个参数可以注意下:
- Host:别名,我们可以通过ssh stable进行登录。
- User:username@hostname我们通常通过这种方式指定登录的远程服务器,username填写对应的就行。
- HostName:同User的方式。
- IdentityFile:配置生成的rsa私钥的地址,我们的所有请求报文都会先进行hash之后获得digest然后通过私钥加密。
配置服务器公钥
登陆服务器手动配置
可以直接将公钥粘贴到服务器authorized_keys文件中。
命令直接配置
1 | ssh-copy-id -i 公钥文件名(stable_rsa.pub) username@remote-server |
配置之后我们通过:
1 | ssh stable |
可以直接登录到服务器:
碰到的问题
目录文件权限太大,需要调整权限:
1 | chmod -R 700 ~/.ssh |
总结
设置SSH免密登录,学习本地~/.ssh文件夹中的配置项即可。