实现任意机器间均非输入密码进行SSH登录

本文详细介绍了如何在多台服务器间实现免密码SSH登录,通过生成公钥证书并复制到各服务器的`authorized_keys`文件中,实现任意两台机器间的非密码登录。包括本地生成公钥证书、远程机器接收证书并配置授权文件的全过程。

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

实现原理:
在本机A上执行“ssh-keygen -b 1024 -t rsa”命令,就会生成公钥证书“id_rsa.pub”,
在远程机器B的路径/home/autoxj1/.ssh/下新建文件“authorized_keys”,
然后将机器A上生成的公钥证书中的文字内容copy到机器B的文件“authorized_keys”里面即可。
--------------------------------
举一反三:假如要想在机器X、机器Y、机器Z、机器W间均实现任意两台机器间均可以非输入密码进行登录,应该如何操作?
具体操作方法:
步骤1:分别在机器X、机器Y、机器Z、机器W执行“ssh-keygen  -b  1024  -t  rsa”命令,生成公钥证书“id_rsa.pub”;
步骤2:分别将机器X、机器Y、机器Z、机器W的公钥证书“id_rsa.pub”内容全部粘贴到新建文件“authorized_keys”中;
步骤3:将新建文件“authorized_keys”分别复制到机器X、机器Y、机器Z、机器W的/home/autoxj1/.ssh/下;
===================================================================================================================================

在远程服务器上新增客户端机器公钥证书文件的场合,
使用下面的(一)和(二)操作来完成:

(一)在LNSY-PS-YDSMJS-WEB01机器的autoxj1用户下,生成证书并将公钥证书放到LNSY-PS-YDSMJS-WEB02机器上,
      从而可以时间在LNSY-PS-YDSMJS-WEB01机器的autoxj1用户下可以免密码ssh登录到LNSY-PS-YDSMJS-WEB02机器。
      具体操作如下:
--------------------------------------------------------------
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ pwd
/home/autoxj1
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ whoami
autoxj1
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ ll
总计 0
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ ls -al
总计 40
drwx------  4 autoxj1 mpsp    4096 05-06 11:35 .
drwxr-xr-x 11 root    root    4096 05-05 14:16 ..
-rw-------  1 autoxj1 autoxj1  478 05-06 11:39 .bash_history
-rw-r--r--  1 autoxj1 autoxj1   33 05-05 14:16 .bash_logout
-rw-r--r--  1 autoxj1 autoxj1  176 05-05 14:16 .bash_profile
-rw-r--r--  1 autoxj1 autoxj1  124 05-05 14:16 .bashrc
-rw-r--r--  1 autoxj1 autoxj1  515 05-05 14:16 .emacs
drwxr-xr-x  4 autoxj1 autoxj1 4096 05-05 14:16 .mozilla
drwx------  2 autoxj1 mpsp    4096 05-06 11:35 .ssh
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ ssh-keygen  -b  1024  -t  rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/autoxj1/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/autoxj1/.ssh/id_rsa.
Your public key has been saved in /home/autoxj1/.ssh/id_rsa.pub.
The key fingerprint is:
c3:6c:ae:c6:12:d3:77:14:82:b1:fd:ab:5b:4b:f7:3a autoxj1@LNSY-PS-YDSMJS-WEB01
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ ls -al
总计 40
drwx------  4 autoxj1 mpsp    4096 05-06 11:35 .
drwxr-xr-x 11 root    root    4096 05-05 14:16 ..
-rw-------  1 autoxj1 autoxj1  478 05-06 11:39 .bash_history
-rw-r--r--  1 autoxj1 autoxj1   33 05-05 14:16 .bash_logout
-rw-r--r--  1 autoxj1 autoxj1  176 05-05 14:16 .bash_profile
-rw-r--r--  1 autoxj1 autoxj1  124 05-05 14:16 .bashrc
-rw-r--r--  1 autoxj1 autoxj1  515 05-05 14:16 .emacs
drwxr-xr-x  4 autoxj1 autoxj1 4096 05-05 14:16 .mozilla
drwx------  2 autoxj1 mpsp    4096 05-06 11:52 .ssh
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ cd /home/autoxj1/.ssh/
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ ll
总计 12
-rw------- 1 autoxj1 mpsp  887 05-06 11:52 id_rsa
-rw-r--r-- 1 autoxj1 mpsp  238 05-06 11:52 id_rsa.pub
-rw-r--r-- 1 autoxj1 mpsp 1182 05-06 11:36 known_hosts
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ pwd
/home/autoxj1/.ssh
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ more id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAwgTOZTHEaYMESc8vA6MBNob1lLLydbPQeAptj5VX5M21Xe+8gsIIAHd3IVcoh4a9zf7je1A9vbBHN1Chc9MhMkn4lA7XxbhR41lE+Wml6F2mO728kBKQxk159EUDbjqOkp5UxjhGcuStJWRsoBvAj2UrMYPbeA1oU56Sj/CNkkE= autoxj1@LNSY-PS-YDSMJS-WEB01
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ scp id_rsa.pub  autoxj1@172.17.1.200:/home/autoxj1/.ssh/
 Authorized users only. All activity may be monitored and reported
autoxj1@172.17.1.200's password:
id_rsa.pub      100%  238     0.2KB/s   00:00
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ ssh autoxj1@172.17.1.200
 Authorized users only. All activity may be monitored and reported
autoxj1@172.17.1.200's password:
Last login: Wed May  6 12:08:27 2015 from 172.17.1.201
 Authorized users only. All activity may be monitored and reported
[autoxj1@LNSY-PS-YDSMJS-WEB02 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 ~]$ cd /home/autoxj1/.ssh/
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ ll
总计 8
-rw-r--r-- 1 autoxj1 mpsp 238 05-06 12:11 id_rsa.pub
-rw-r--r-- 1 autoxj1 mpsp 394 05-06 11:35 known_hosts
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ mv  id_rsa.pub  authorized_keys
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ ll
总计 8
-rw-r--r-- 1 autoxj1 mpsp 238 05-06 12:11 authorized_keys
-rw-r--r-- 1 autoxj1 mpsp 394 05-06 11:35 known_hosts
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ exit
logout
Connection to 172.17.1.200 closed.
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ ssh autoxj1@172.17.1.200
 Authorized users only. All activity may be monitored and reported
Last login: Wed May  6 12:11:20 2015 from 172.17.1.201
 Authorized users only. All activity may be monitored and reported
[autoxj1@LNSY-PS-YDSMJS-WEB02 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 ~]$
==========================================================================================================================================
==========================================================================================================================================
==========================================================================================================================================


(二)在LNSY-PS-YDSMJS-WEB02机器的autoxj1用户下,生成证书并将公钥证书放到LNSY-PS-YDSMJS-WEB01机器上,
      从而可以时间在LNSY-PS-YDSMJS-WEB02机器的autoxj1用户下可以免密码ssh登录到LNSY-PS-YDSMJS-WEB01机器。
      具体操作如下:
--------------------------------------------------------------
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ whoami
autoxj1
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ pwd
/home/autoxj1/.ssh
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ ll
总计 8
-rw-r--r-- 1 autoxj1 mpsp 238 05-06 12:11 authorized_keys
-rw-r--r-- 1 autoxj1 mpsp 394 05-06 11:35 known_hosts
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ ssh-keygen  -b  1024  -t  rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/autoxj1/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/autoxj1/.ssh/id_rsa.
Your public key has been saved in /home/autoxj1/.ssh/id_rsa.pub.
The key fingerprint is:
de:47:68:e8:c2:eb:a5:8a:d3:a3:6a:29:4f:86:9d:57 autoxj1@LNSY-PS-YDSMJS-WEB02
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ ll
总计 16
-rw-r--r-- 1 autoxj1 mpsp 238 05-06 12:11 authorized_keys
-rw------- 1 autoxj1 mpsp 887 05-06 14:48 id_rsa
-rw-r--r-- 1 autoxj1 mpsp 238 05-06 14:48 id_rsa.pub
-rw-r--r-- 1 autoxj1 mpsp 394 05-06 11:35 known_hosts
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ scp id_rsa.pub autoxj1@172.17.1.201:/home/autoxj1/.ssh/authorized_keys
 Authorized users only. All activity may be monitored and reported
autoxj1@172.17.1.201's password:
id_rsa.pub               100%  238     0.2KB/s   00:00
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB02 .ssh]$ ssh autoxj1@172.17.1.201
 Authorized users only. All activity may be monitored and reported
Last login: Wed May  6 14:53:07 2015 from 172.17.1.201
 Authorized users only. All activity may be monitored and reported
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 ~]$ cd /home/autoxj1/.ssh/
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ ll
总计 16
-rw-r--r-- 1 autoxj1 mpsp  238 05-06 14:56 authorized_keys
-rw------- 1 autoxj1 mpsp  887 05-06 11:52 id_rsa
-rw-r--r-- 1 autoxj1 mpsp  238 05-06 11:52 id_rsa.pub
-rw-r--r-- 1 autoxj1 mpsp 1576 05-06 11:57 known_hosts
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ date
2015年 05月 06日 星期三 14:57:01 CST
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$ more authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAIEAyzCbRXlidc7I9Y67OJC15zBxe4KiC3e0vMgeCb5dSfAHZUwgKjF5opwN+qJ3NL+uRaN8i1GkTztHUgBLLIwOumAEwPINx/bzBqkLq8BWKLOZ2yDojKP4Mh0JpIOA8E3IH6PGMAluJnK7/L8gZcTm9Vg52ja85G2bqdGvF0fXPvk= autoxj1@LNSY-PS-YDSMJS-WEB02
[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$

[autoxj1@LNSY-PS-YDSMJS-WEB01 .ssh]$


<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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值