Centos7下实现免密码登录

本文详细介绍了在CentOS7系统中如何实现SSH免密码登录,包括生成SSH密钥、设置权限以及多种实现免密登录的方法,如ssh-copy-id、scp和使用Ansible批量配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、生成密钥

[root@localhost soft]# ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:pvR6iWfppGPSFZlAqP35/6DEtGTvaMY64otThWoBTuk root@localhost.localdomain
The key's randomart image is:
+---[RSA 2048]----+
|  .  o.          |
|.o  . .          |
|+. o . . o       |
| Eo o . +        |
|   o o..S.       |
|  o ..oO.o       |
| . . ..=*oo      |
|  ..o *=@+ .     |
|  .oo=+@+.o..    |
+----[SHA256]-----+

生成之后会在用户的根目录生成一个 “.ssh”的文件夹,进入“.ssh”会生成以下几个文件

[root@localhost ~]# ls -a
.  ..  anaconda-ks.cfg  .ansible  .bash_history  .bash_logout  .bash_profile  .bashrc  .cache  .config  .cshrc  .scalac  .scala_history  .ssh  .tcshrc  .viminfo

进入“.ssh”会生成以下几个文件

[root@localhost .ssh]# ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts

authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥
id_rsa : 生成的私钥文件
id_rsa.pub : 生成的公钥文件
know_hosts : 已知的主机公钥清单
如果希望ssh公钥生效需满足至少下面两个条件:

  1. .ssh目录的权限必须是700
  2. .ssh/authorized_keys文件权限必须是600

二、远程免密登录
1.原理:

  • 客户端向服务器端发出连接请求
  • 服务器端向客户端发出自己的公钥
  • 客户端使用服务器端的公钥加密通讯密钥然后发给服务器端
  • 如果通讯过程被截获,由于窃听者即使获知公钥和经过公钥加密的内容,但不拥有私 钥依然无法解密(RSA算法)
  • 服务器端接收到密文后,用私钥解密,获知通讯密钥
    2.常用以下几种方法:
    2.1通过ssh-copy-id的方式
[root@localhost ~]# ssh-copy-id -i root@worker1
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@worker1's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@worker1'"
and check to make sure that only the key(s) you wanted were added.

2.2通过scp将内容写到对方的文件中

[root@test .ssh]# scp -p ~/.ssh/id_rsa.pub root@192.168.91.135:/root/.ssh/authorized_keys
root@192.168.91.135's password: 
id_rsa.pub 100% 408 0.4KB/s 00:00 
[root@test .ssh]# 
[root@test .ssh]# 
[root@test .ssh]# 
[root@test .ssh]# ssh root@192.168.91.135
Last login: Mon Oct 10 01:27:02 2016 from 192.168.91.133
[root@localhost ~]#

或者

$ scp ~/.ssh/id_rsa.pub root@<remote_ip>:pub_key //将文件拷贝至远程服务器
$ cat ~/pub_key >>~/.ssh/authorized_keys //将内容追加到authorized_keys文件中, 不过要登录远程服务器来执行这条命令

2.3通过Ansible实现批量免密
将需要做免密操作的机器hosts添加到/etc/ansible/hosts下:

[Avoid close]
192.168.91.132
192.168.91.133
192.168.91.134

执行命令进行免密操作

ansible <groupname> -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k

示例:

[root@test sshpass-1.05]# ansible test -m authorized_key -a "user=root key='{{ lookup('file','/root/.ssh/id_rsa.pub') }}'" -k
  SSH password: ----->输入密码
  192.168.91.135 | success >> {
  "changed": true, 
  "key": "ssh-rsa    AAAAB3NzaC1yc2EAAAABIwAAAQEArZI4kxlYuw7j1nt5ueIpTPWfGBJoZ8Mb02OJHR8yGW7A3izwT3/uhkK7RkaGavBbAlprp5bxp3i0TyNxa/apBQG5NiqhYO8YCuiGYGsQAGwZCBlNLF3gq1/18B6FV5moE/8yTbFA4dBQahdtVP PejLlSAbb5ZoGK8AtLlcRq49IENoXB99tnFVn3gMM0aX24ido1ZF9RfRWzfYF7bVsLsrIiMPmVNe5KaGL9kZ0svzoZ708yjWQQCEYWp0m+sODbtGPC34HMGAHjFlsC/SJffLuT/ug/hhCJUYeExHIkJF8OyvfC6DeF7ArI6zdKER7D8M0SM  WQmpKUltj2nltuv3w== root@localhost.localdomain", 
  "key_options": null, 
  "keyfile": "/root/.ssh/authorized_keys", 
  "manage_dir": true, 
  "path": null, 
  "state": "present", 
  "unique": false, 
  "user": "root"
  }

参考:

http://www.jb51.net/article/94599.htm

### 如何在 CentOS 7 上设置 SSH 免密登录 #### 准备工作 为了确保能够成功配置免密码登录,在开始之前需确认已安装并启动了 OpenSSHsshd 服务。通常情况下,默认已经安装。 #### 创建公钥和私钥对 如果本地机器尚未创建过 SSH 密钥,则需要先生成一对新的 RSA 密钥: ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` 上述命令将会提示指定保存位置(默认即可),以及输入 passphrase(可以为空)。完成后会在 `~/.ssh` 文件夹下找到两个新文件:`id_rsa`(私钥) 及其对应的公开部分 `id_rsa.pub`[^3]。 #### 将公钥复制到目标服务器 有多种方式可把客户端产生的公钥传输至远程主机,这里介绍两种常用方法之一——利用 `ssh-copy-id` 工具完成操作非常简便快捷: ```bash ssh-copy-id user@remote_host_ip_address ``` 此指令会自动连接到指定 IP 地址的目标设备,并询问当前用户的密码验证身份;一旦认证通过即刻上传 `.pub` 文件中的内容追加进对方家目录下的 `authorized_keys` 中去[^4]。 另一种手动的方式则是直接编辑远程计算机上的 `~/.ssh/authorized_keys` 文件并将本地生成的公钥粘贴进去。不过这种方式相对复杂一些,推荐初学者采用前一种方案。 #### 测试无密码访问功能 现在应该可以从源节点无需再次提供任何凭证就能顺利登陆目的端了。尝试执行如下命令检验效果: ```bash ssh user@remote_host_ip_address ``` 如果一切正常的话,此时应当可以直接进入远端 shell 而不需要重新输入密码了[^1]。 #### 安全建议 虽然实现了便捷性,但也请注意适当调整权限以保障安全性。对于 `/home/user/.ssh` 目录及其内部的所有文件来说,理想的权限设定应该是这样的: - 对于整个`.ssh`目录本身而言,应将其设为仅允许属主读写(`chmod 700 ~/.ssh`) - 授权列表文件`authorized_keys`则只需让拥有者具有读取权利就足够了 (`chmod 600 ~/.ssh/authorized_keys`) 这样既不影响正常使用又能有效防止潜在风险的发生[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值