这里的密钥对是 Public key,具体请参考 公开密钥加密

将密钥保存到远程服务器

1.如果是通过ssh-keygen生成的密钥对,那么我们需要将id_rsa.pub文件放置到你要进行远程登陆的用户主目录下,比如这里的用户名为centos,主目录为/home/centos,那么我们需要将id_rsa.pub公钥放置到/home/centos/.ssh目录下,然后执行以下操作:

使用命令

1
ssh-keygen -t rsa

接下来会提示让你输入一个路径来保存密钥对,默认在 ~/.ssh/id_rsa 下面生成 id_rsa(私钥)和 id_rsa.pub(公钥),如果没什么特殊需求就直接默认就好。

  • id_rsa.pub文件,重命名为 authorized_keys;
  • 执行chmod 600 ./authorized_keys 命令,修改权限;
  • 执行命令 sudo vi /etc/ssh/sshd_config进行配置,将RSAAuthentication 和 PubkeyAuthentication 后面的值都改成yes ,保存;
  • 重启sshd服务,Debian/Ubuntu执行sudo /etc/init.d/ssh restart ;CentOS执行:sudo /etc/init.d/sshd restart。

注:centos7重启服务方式与以前不同,请执行systemctl restart sshd.service

2.如果是通过xshell方式生成的密钥对,那么将xshell生成的id_rsa.pub文件放置到用户的主目录下的.ssh目录(比如/home/centos/.ssh),接下来执行的操作跟上述操作[1 ] 是一样的。

然后提示你输入密码(即本机使用 SSH 连接时的密码 #和服务器密码无关),也是直接回车默认为空即可。

将公钥上传到服务器上

这里以使用 SCP 为例,上传公钥 id_rsa.pub 到服务器上

1
scp ~/.ssh/id_rsa.pub root@139.59.22.131:~

将公钥追加到服务器的认证密钥中

将上传到服务器上的 id_rsa.pub 公钥追加到 authorized_keys 文件中,命令是

1
cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

修改服务器的配置以启用公钥认证

修改 vi /etc/ssh/sshd_config 配置文件(如果有的话就进行修改,没有的话就添加进来)

1
2
3
4
RSAAuthentication yes        # 启用 RSA 认证(默认是注释掉的,将注释去掉,如果不是 yes,改为 yes)
PubkeyAuthentication yes # 启用公钥认证(默认是注释掉的,将注释去掉,如果不是 yes,改为 yes)
PasswordAuthentication no # 禁止密码认证 (改为 no, 默认为 yes 是用密码认证)
StrictModes no # 修改为 no, 默认为 yes. 如果不修改用 key 登陆是出现 server refused our key(如果 StrictModes 为 yes 必需保证存放公钥的文件夹的拥有与登陆用户名是相同的.“StrictModes” 设置 ssh 在接收登录请求之前是否检查用户家目录和 rhosts 文件的权限和所有权。这通常是必要的,因为新手经常会把自己的目录和文件设成任何人都有写权限。)

重启 SSH 服务

1
2
3
service sshd restart
# 或者
/etc/init.d/ssh restart

最后验证一下

连接服务器,这里以 SSH 客户端为例

1
ssh root@139.59.22.131

然后,就直接连上了,不需要输入密码了呢 O(≧▽≦)O