ssh 免密登录设置

1. SSH的登录原理如图所示:

ssh 免密登录设置_第1张图片

来源:https://www.jianshu.com/p/33461b619d53

  • Client将自己的公钥存放在Server上,追加在文件authorized_keys中。
  • Server端接收到Client的连接请求后,会在authorized_keys中匹配到Client的公钥pubKey,并生成随机数R,用Client的公钥对该随机数进行加密得到pubKey(R)
    ,然后将加密后信息发送给Client。
  • Client端通过私钥进行解密得到随机数R,然后对随机数R和本次会话的SessionKey利用MD5生成摘要Digest1,发送给Server端。
  • Server端会也会对R和SessionKey利用同样摘要算法生成Digest2。
  • Server端会最后比较Digest1和Digest2是否相同,完成认证过程

2.  配置本机用户ssh无密访问localhost机器

(1)启动用户登录下,进入~/.ssh目录,通过ssh-keygen -t rsa命令生成公钥和私钥,之后一直回车:


[xxx@localhost .ssh]$ ssh-keygen -t rsa

Generating public/private rsa key pair.

Enter file in which to save the key (/home/xxx/.ssh/id_rsa): 

Enter passphrase (empty for no passphrase): 

Enter same passphrase again: 

Your identification has been saved in /home/xxx/.ssh/id_rsa.

Your public key has been saved in /home/xxx/.ssh/id_rsa.pub.

The key fingerprint is:

21:46:2d:36:bb:34:73:xx:xx:xx:xx:xx:xx:xx:xx:xx [email protected]

The key's randomart image is:

+--[ RSA 2048]----+

|      ..  ... E  |

|     .+ . .= + . |

|     .o+..o = +  |

|     .=... + + o |

|     . =S   o . .|

|      .          |

|                 |

|                 |

|                 |

+-----------------+


 

执行完了之后会在当前目录生成公钥(id_rsa_.pub)和私钥(id_rsa)文件。

(2) 配置authorized_keys授权文件,将公钥内容追加到authorized_keys中,(若是访问其他主机,则需要将公钥上传至目标机器并追加公钥内容至目标机器authorized_keys文件中)

若无该文件,touch authorized_keys 生成一个。

#若无authorized_keys则生成
touch authorized_keys

#一定要设置authorized_keys文件权限为600
chmod 600 authorized_keys

#追加xxx用户的公钥至授权文件中
cat id_rsa.pub >> authorized_keys

(3)验证是否可以无密码登录localhost

[xxx@localhost hadoop]$ ssh localhost
Last login: Fri Sep  7 01:27:12 2018 from localhost

如此未输入密码登录成功, 则证明ssh配置成功。

A机器要是访问B机器,则A机器生成公钥私钥,将A生成的公钥上传至B机器, 若通过U用户登录B机器,则追加A的公钥到U的home/U/.ssh目录中的authorized_keys文件。可以通过以下命令:

cat id_rsa.pub | ssh xxx用户名@主机ip或域名  'cat >> ~/.ssh/authorized_keys'

(4)Hostkey verification failed 问题

在~/.ssh目录下一般会存在authorized_keys和know_hosts两个文件:

authorized_keys:记录需要ssh无密码登录当前机器的远程登录请求方的公钥;

know_hosts: 记录当前机器成功登录过得远程机器的key,用于本地机器验证远程机器是否一致;

如, A机器远程无密码登录B机器,则A的公钥需要写入B机器 ~/.ssh/authorized_keys文件中,首次登录成功时会提示是否将B的机器key加入到A的~/.ssh/know_hosts中,则A保留了B机器的身份凭据。

A登录B出现Hostkey verification failed问题的原因是A中未保留正确的B的机器key。

可以删除A ~/.ssh/know_hosts中原有的B的机器key。再次尝试登录。

另外可以,尝试修改ssh的配置,root用户vi /etc/ssh/ssh_config, 将StrictHostKeyChecking 改成StrictHostKeyChecking no

 

 

 

 

 

 

 

你可能感兴趣的:(运维,环境搭建,SSH免登陆)