SSH 实现多台机器之间的互相免密登录

本文介绍如何在三台机器间实现SSH免密码连接,包括生成密钥、公钥上传、测试连接及SSH配置修改等步骤。通过比喻解释SSH工作原理,最后确保仅免密连接的机器能通过SSH连接。

有三台机器,ip和对应的hostname分别为
192.168.6.2 server2
192.168.6.3 server3
192.168.6.4 server4
我们的目的是实现三台机器之间互相免密SSH链接

大概分为三步

1.客户端生成秘钥

首先想上server2(客户端)免密连接上server3(服务端),server4(服务端)

先在server2上生成私钥和公钥

执行下面命令,然后一路狂按回车就完事

ssh-keygen

完了之后会在用户目录下的.ssh文件夹创建一个公钥和一个私钥

比如我是在root用户下,所以就是/root/.ssh
在这里插入图片描述
id_rsa (私钥)
id_rsa.pub (公钥)

2.把公钥上传到服务端

还是在server2上进行操作

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

上面是上传到server3的root用户下,会在server3的/root/.ssh目录下生成一个authorized_keys文件

此时执行

vim authorized_keys

可以看到server2的公钥写在里面
这样就可以实现server2免密SSH链接server3

3.测试免密连接实现

发现server2已经可以免密ssh登录server3了
在这里插入图片描述

再把公钥发给server4就可以实现免密登录server4了

server3同样把公钥发给server2,server4就可免密登录这两台机器
server4同样把公钥发给server2,server3就可免密登录这两台机器
这样就实现了三台机器互相免密登录,此时互相scp传文件免密

4.个人感悟

ssh原理

开始有点分不清,这一通操作猛如虎后,分不清谁能免密连上谁。
后来通过实践研究自己总结了一下。把三台机器分别比喻成三个城池,
在一开始server2城池的人想去server3城池,server4城池,需要走城池大门,
卫兵要检查看有没有入城许可(输入server3,4密码的过程类似于此)。

后来server2的人去的次数多了嫌麻烦,干脆在城里放进去一个内应,以后每次去城里这个内应直接接进去,不用卫兵检查。这个内应就是放在server3,server4里面的公钥。

关于ssh-copy-id -i root/.ssh/id_rsa.pub user@ip的解释

一开始很疑惑这个命令是什么意思,后来才明白其实这个命令类似于

scp  root/.ssh/id_rsa.pub user@ip:/root/.ssh/authorized_keys

实现的功能也是把公钥发给某个机器的.ssh文件夹下,并重命名为authorized_keys

authorized_keys里面可以存放很多台机器的公钥,谁的公钥在就可以免密连这台机器

区别在于,如果使用上面scp命令的话,新来的会覆盖原来的,那么之前的机器就连不上

而 ssh-copy-id -i 命令可以把新的公钥追加在原来的公钥后面,不会影响之前机器的连接

5.ssh文件配置

如果不想让别的机器通过ssh输入密码连接,只想让免密连接机器连接怎么办

[root@server2 .ssh]# cd /etc/ssh/
[root@server2 ssh]# ls
moduli       ssh_host_ecdsa_key      ssh_host_ed25519_key.pub
ssh_config   ssh_host_ecdsa_key.pub  ssh_host_rsa_key
sshd_config  ssh_host_ed25519_key    ssh_host_rsa_key.pub
[root@server2 ssh]# vim sshd_config

把sshd_config里面的 PasswordAuthentication yes改成PasswordAuthentication no
然后重启sshd服务,除了免密的机器别的机器就无法连接

[root@server2 ssh]# systemctl restart sshd

在这里插入图片描述

<think>我们参考用户的问题和之前的引用,用户想要配置多台虚拟机之间SSH免密登录。根据引用[1][2][3],我们可以总结出以下步骤:1.在每台机器上安装openssh-server(如果未安装)2.在其中一台机器(可以是主控机器)上生成SSH密钥对(如果没有)3.将公钥复制到所有虚拟机(包括自己)的~/.ssh/authorized_keys文件中4.设置正确的权限具体步骤如下:###步骤1:安装SSH服务在每台虚拟机上安装SSH服务器(如果尚未安装):```bashsudoaptupdatesudoaptinstallopenssh-server-y```###步骤2:生成SSH密钥对在主控机器(例如HadoopMaster)上生成密钥对(如果还没有):```bashssh-keygen-trsa-b4096```或者使用Ed25519算法(更安全):```bashssh-keygen-ted25519```生成过程中,按Enter使用默认路径(~/.ssh/id_rsa)和空密码(如果不需要密码保护)。###步骤3:复制公钥到所有机器我们需要将公钥(默认为~/.ssh/id_rsa.pub)添加到每台机器的~/.ssh/authorized_keys文件中。####方法1:使用ssh-copy-id(推荐)如果机器已经设置了密码登录,可以使用`ssh-copy-id`命令:```bashssh-copy-idhadoop@HadoopSlave01ssh-copy-idhadoop@HadoopSlave02#对于自己(主控机)也需要复制ssh-copy-idlocalhost```注意:需要输入密码。####方法2:手动复制(当无法使用ssh-copy-id时)1.在主控机上查看公钥内容:```bashcat~/.ssh/id_rsa.pub```2.登录到每一台虚拟机(包括自己),将公钥内容追加到`~/.ssh/authorized_keys`文件:```bashecho"公钥内容">>~/.ssh/authorized_keys```或者使用scp(如果已经有一台机器上有了authorized_keys文件,可以复制到其他机器):```bash#首先将自己的公钥加入本机的authorized_keyscat~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys#然后将authorized_keys文件复制到其他机器scp~/.ssh/authorized_keyshadoop@HadoopSlave01:~/.ssh/scp~/.ssh/authorized_keyshadoop@HadoopSlave02:~/.ssh/```注意:如果目标机器上没有.ssh目录,需要先创建(并设置权限),或者使用ssh登录一次会自动创建。###步骤4:设置正确的文件权限在每台机器上,确保以下权限:```bashchmod700~/.sshchmod600~/.ssh/authorized_keys```###步骤5:测试免密登录从主控机尝试登录其他机器:```bashsshHadoopSlave01```如果不需要输入密码,则配置成功。###注意事项1.**主机名解析**:确保每台机器主机名(如HadoopSlave01)可以在其他机器上解析(可以通过/etc/hosts文件或DNS配置)。```bash#例如,在每台机器的/etc/hosts文件中添加:192.168.1.101HadoopMaster192.168.1.102HadoopSlave01192.168.1.103HadoopSlave02```2.**用户一致性**:确保所有机器上都有相同的用户名(如hadoop),否则需要在命令中指定用户名(如`sshuser@host`)。3.**多台机器互信**:如果希望任意两台机器之间都可以免密登录,需要在每台机器上都执行步骤2(生成密钥),并将每台机器的公钥都添加到所有机器的authorized_keys文件中。4.**安全性**:如果使用空密码的密钥,请确保只有可信的机器可以访问。###引用说明以上步骤参考了引用[1][2][3]中的方法,特别是生成密钥、复制公钥到authorized_keys以及使用scp分发authorized_keys文件[^1][^2][^3]。§§相关问题§§1.如何解决SSH免密登录配置后仍然需要输入密码的问题?2.如何配置多台机器之间互相免密登录(而不仅仅是主控机到其他机器)?3.如何为不同的主机使用不同的SSH密钥?4.如何在不暴露私钥的情况下实现多台机器的互信?</think>### 配置多台虚拟机 SSH 免密登录指南 #### 1. **所有机器安装 SSH 服务** ```bash # 在所有虚拟机执行 sudo apt update sudo apt install openssh-server -y ``` #### 2. **主控机生成 SSH 密钥** ```bash # 在主控机器执行(如 HadoopMaster) ssh-keygen -t rsa -b 4096 # 连续按 Enter 使用默认设置 ``` 生成的密钥位置: - 私钥:`~/.ssh/id_rsa` - 公钥:`~/.ssh/id_rsa.pub`[^1] #### 3. **配置主机互信** ```bash # 在主控机执行以下操作 # 步骤1:创建授权文件 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 步骤2:复制授权文件到其他节点 scp ~/.ssh/authorized_keys hadoop@HadoopSlave01:~/.ssh/ scp ~/.ssh/authorized_keys hadoop@HadoopSlave02:~/.ssh/ ``` > 替换 `hadoop` 为实际用户名,`HadoopSlave01/02` 为实际主机名或 IP[^2] #### 4. **设置文件权限(所有机器执行)** ```bash chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys chmod 600 ~/.ssh/id_rsa ``` > 权限错误是导致免密登录失败的最常见原因[^3] #### 5. **配置主机名解析(可选但推荐)** ```bash # 所有机器编辑 /etc/hosts sudo nano /etc/hosts # 添加内容示例: 192.168.1.101 HadoopMaster 192.168.1.102 HadoopSlave01 192.168.1.103 HadoopSlave02 ``` #### 6. **测试免密登录** ```bash # 从主控机测试 ssh HadoopSlave01 # 应该直接登录,无需密码 exit # 测试反向连接(如果需双向免密) ssh HadoopMaster # 在 Slave01 执行 ``` ### 配置示意图 ```mermaid graph LR A[主控机] -->|1. 生成密钥| B(id_rsa + id_rsa.pub) B -->|2. 创建授权文件| C(authorized_keys) C -->|3. 分发到节点| D[Slave01] C -->|3. 分发到节点| E[Slave02] A -->|4. 测试连接| D A -->|4. 测试连接| E ``` ### 故障排查技巧 1. **权限问题**: ```bash # 检查权限 ls -ld ~/.ssh ls -l ~/.ssh/authorized_keys ``` 2. **详细日志模式**: ```bash ssh -vvv HadoopSlave01 # 显示详细连接过程 ``` 3. **服务状态检查**: ```bash sudo systemctl status ssh # 确认 SSH 服务运行 ``` ### 高级配置建议 - **多主机互信**:在所有机器重复步骤 2-3 实现双向免密 - **自定义密钥**:使用 `-f` 参数指定密钥名 `ssh-keygen -f ~/.ssh/cluster_key` - **安全加固**:在 `/etc/ssh/sshd_config` 中禁用密码登录: ```config PasswordAuthentication no ``` 完成配置后,集群内所有虚拟机可通过主机名直接互访,无需密码验证[^1][^2][^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值