SSH无密码登录

​工作中经常需要登录服务器,每次都需要输入服务器登录密码是相当麻烦的,我们可以通过设置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是我们在输入的时候指定的文件名。

cmd-markdown-logo

配置config文件

1
cd ~/.ssh

打开config文件,如果不存在,自己新建一个:

1
mkfile m config

当前我本地的config配置为:

1
2
3
4
5
6
7
8
9
10
Host github.com
IdentityFile ~/.ssh/id_rsa
Host jhost
User yeqiaozhu
HostName jhost.hz.souche-inc.com
IdentityFile ~/.ssh/jump_rsa
Host stable
User souche
HostName 172.17.40.227
IdentityFile ~/.ssh/stable_rsa

其中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

可以直接登录到服务器:

cmd-markdown-logo

碰到的问题

cmd-markdown-logo

目录文件权限太大,需要调整权限:

1
chmod -R 700 ~/.ssh

总结

设置SSH免密登录,学习本地~/.ssh文件夹中的配置项即可。