Centos SSH免密码登录

Lasted 2020-01-16 13:56:36

SSH概述

SSH (全称:Secure Shell)是加密的网络传输协议,常用于远程登录服务器,执行命令。Windows下可以用SSH客户端进行远程连接。

SSH基于密码的安全验证,无法避免“中间人”攻击;而基于密钥(免密码)的安全验证能避免被攻击,方便服务器之间脚本进行访问、执行任务脚本或者传输文件而无需输入密码。

现在,假设有A、B两台Linux服务器,需要在A服务器免密码登录B服务器,可以进行如下操作。后面还会介绍A、B相互免密码访问的操作。

密钥配置

1.在主机A中生成密钥

登录主机A,输入ssh-keygen命令,如下所示:

#ssh-keygen
ssh-keygen -t rsa

连续三次默认回车,结果如下图所示:

默认会在 ~/.ssh 目录下生成 id_rsa 和 id_rsa.pub 文件。id_rsa 是私钥文件,id_rsa.pub 是公钥文件。此处密钥文件位置和名称可以在上图中自己定义。

2.复制公钥到主机B

需要把主机A中生成的公钥id_rsa.pub添加到主机B中,输入以下命令:

#ssh-copy-id
ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.1.108

输入主机B的密码,执行结果如下图所示:

注意

如果ssh不能登录主机B则不能使用 ssh-copy-id命令。可以把主机A的公钥 id_rsa.pub 里面的内容手动添加到主机B的 authorized_keys 文件中。authorized_keys 文件一般位于主机B中的.ssh目录中,文件权限为 600

3.主机A免密码登录主机B

完成前面两步,主机A就可以免密码登录主机B,命令如下:

#ssh
ssh root@192.168.1.108
#或者 -i 指定私钥文件位置
ssh -i ~/.ssh/id_rsa root@192.168.1.108

扩展思路

以上步骤能实现主机A免密码访问主机B,如果需要主机B也能免密码访问主机A,按以上步骤在主机B执行即可。

如果需要主机C、主机D等都能免密码登录主机B,可以按以上流程每台机器都生成私钥,或者直接复制主机A的私钥到其他服务器的 .ssh 目录下,就可实现多服务器免密码访问主机B。

如果需要主机A免密码访问主机C、主机D等等,执行第2步到对应的机器或者在对应机器的 authorized_keys 文件中添加主机A的公钥 id_rsa.pub,就可实现主机A免密码访问多服务器。

可能遇到的问题

出现 Permissions 0644 

可能是文件权限问题,设置私钥文件权限为 600即可。chmod 600 ~/.ssh/id_rsa

参考资源:

  1. https://www.ssh.com/ssh/