配置SSH使用无密码公钥认证的方式

本文详细介绍如何在三台Linux机器之间配置SSH公钥认证,实现免密码登录。包括生成密钥对、分发公钥及配置SSH服务等步骤。

以本文中的三台机器为例,现在dbrg-1是主节点,它需要主动发起SSH连接到dbrg-2 和dbrg-3,对于SSH服务来说,dbrg-1就是SSH客户端,而dbrg-2、dbrg-3则是SSH服务端,因此在dbrg-2,dbrg-3 上需要确定sshd服务已经启动。简单的说,在dbrg-1上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到dbrg-2,dbrg-3上,这 样,比如当dbrg-1向dbrg-2发起ssh连接的时候,dbrg-2上就会生成一个随机数并用dbrg-1的公钥对这个随机数进行加密,并发送给 dbrg-1;dbrg-1收到这个加密的数以后用私钥进行解密,并将解密后的数发送回dbrg-2,dbrg-2确认解密的数无误后就允许dbrg-1 进行连接了。这就完成了一次公钥认证过程。

对于本文中的三台机器,首先在dbrg-1上生成密钥对:
[dbrg@dbrg-1:~]$ssh-keygen -t rsa
这 个命令将为dbrg-1上的用户dbrg生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直 接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/dbrg/.ssh目录下。然后将 id_rsa.pub的内容复制到每个机器(也包括本机)的/home/dbrg/.ssh/authorized_keys文件中,如果机器上已经有 authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接cp 或者scp就好了,下面的操作假设各个机器上都没有authorized_keys文件。

对于dbrg-1
[dbrg@dbrg-1:.ssh]$cp id_rsa.pub authorized_keys

对于dbrg-2(dbrg-3同dbrg-2的方法)
[dbrg@dbrg-2:~]$mkdir .ssh
[dbrg@dbrg-1:.ssh]$scp authorized_keys dbrg-2:/home/dbrg/.ssh/
此处的scp就是通过ssh进行远程copy,此处需要输入远程主机的密码,即dbrg-2机器上dbrg帐户的密码,当然,你也可以用其他方法将authorized_keys文件拷贝到其他机器上

[dbrg@dbrg-2:.ssh]$chmod 644 authorized_keys
这一步非常关键,必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。我就曾经在配置SSH的时候郁闷了好久。

[dbrg@dbrg-2:.ssh]ls -la
drwx------ 2 dbrg dbrg .
drwx------ 3 dbrg dbrg ..
-rw-r--r-- 1 dbrg dbrg authorized_keys
注意每个机器上的.ssh目录的ls -la都应该和上面是一样的

接着,在三台机器上都需要对sshd服务进行配置(其实是可以不用配置的,完成了上面的那些操作了以后SSH就已经可以工作了),在三台机器上修改文件/etc/ssh/sshd_config
#去除密码认证
PasswordAuthentication no
AuthorizedKeyFile .ssh/authorized_keys

至此各个机器上的SSH配置已经完成,可以测试一下了,比如dbrg-1向dbrg-2发起ssh连接
[dbrg@dbrg-1:~]$ssh dbrg-2
如果ssh配置好了,就会出现以下提示信息
The authenticity of host [dbrg-2] can't be established.
Key fingerprint is 1024 5f:a0:0b:65:d3:82:df:ab:44:62:6d:98:9c:fe:e9:52.
Are you sure you want to continue connecting (yes/no)?
OpenSSH告诉你它不知道这台主机,但是你不用担心这个问题,因为你是第一次登录这台主机。键入“yes”。这将把这台主机的“识别标记”加到“~/.ssh/know_hosts”文件中。第二次访问这台主机的时候就不会再显示这条提示信息了。
然后你会发现不需要输入密码就可以建立ssh连接了,恭喜你,配置成功了
不过,别忘了测试本机ssh dbrg-1

<think>嗯,用户想了解如何通过公钥认证配置SSH免密登录。我需要根据提供的引用资料整理出一个步骤指南。首先,用户可能是在使用Windows连接到Linux系统,所以得涵盖Windows客户端的操作和Linux服务器的配置。 首先,生成密钥对。根据引用[4],在Windows上可以用Git Bash生成,或者OpenSSH。得详细说明这两个方法,比如用ssh-keygen命令,保存路径默认是.ssh目录,可能需要提示用户输入密码,不过免密的话可以留空。然后,确保生成的id_rsa和id_rsa.pub文件存在。 接下来,把公钥上传到Linux服务器。可以用ssh-copy-id命令,但Windows可能没有这个命令,所以可能需要手动操作。比如,用scp复制公钥到服务器,然后追加到authorized_keys文件中,注意权限设置,这里引用[3]提到要检查服务器的sshd_config配置,确保PubkeyAuthentication和AuthorizedKeysFile正确。还要注意.ssh目录的权限应该是700,authorized_keys是600,否则SSH会拒绝。 然后,测试登录,确认是否成功。如果失败,可能需要检查服务器日志,比如/var/log/secure或auth.log,看是否有权限问题或者配置错误。引用[1]和[2]都提到了这些步骤,需要综合起来。 最后,常见问题处理,比如权限问题、配置文件是否正确,还有可能SELinux或防火墙的问题。用户可能需要关闭这些或者调整设置。另外,引用[5]提到用VS Code的Remote-SSH插件,可能需要配置SSH配置文件,比如指定IdentityFile指向私钥路径。 整理的时候要分步骤,先客户端生成密钥,再服务器配置,然后测试,最后问题排查。确保每个步骤清晰,用户容易跟随。可能还要注意路径的正确性,比如Windows和Linux路径的不同,比如使用~/.ssh和C:\Users\用户名\.ssh的区别。另外,强调安全性,比如私钥的保密,避免泄露。</think>### SSH公钥认证配置免密登录指南 #### 一、核心原理 SSH公钥认证通过非对称加密实现免密登录,客户端持有私钥(`id_rsa`),服务器存储公钥(`id_rsa.pub`)。匹配成功后自动完成认证[^2]。 --- #### 二、具体步骤 1. **生成密钥对(Windows客户端)** ```bash ssh-keygen -t rsa -b 4096 -C "your_email@example.com" ``` - 保存路径默认:`C:\Users\[用户名]\.ssh\` - 生成文件:`id_rsa`(私钥)、`id_rsa.pub`(公钥)[^4] 2. **上传公钥到Linux服务器** ```bash # 方法1:使用ssh-copy-id(需安装OpenSSH客户端) ssh-copy-id -i ~/.ssh/id_rsa.pub user@hostname # 方法2:手动追加(适用于无ssh-copy-id环境) scp id_rsa.pub user@hostname:~/ ssh user@hostname "mkdir -p ~/.ssh && cat ~/id_rsa.pub >> ~/.ssh/authorized_keys && chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys" ``` 3. **服务器端配置验证** ```bash # 检查SSH配置文件 sudo vim /etc/ssh/sshd_config ``` 确认以下参数: ``` PubkeyAuthentication yes AuthorizedKeysFile .ssh/authorized_keys PasswordAuthentication no # 可选关闭密码登录加强安全[^3] ``` 重启服务:`sudo systemctl restart sshd` 4. **客户端测试连接** ```bash ssh -i ~/.ssh/id_rsa user@hostname ``` - 成功则直接进入服务器 - 失败检查日志:`tail -f /var/log/secure`(CentOS)或`/var/log/auth.log`(Ubuntu) --- #### 三、常见问题排查 | 问题现象 | 解决方案 | |---------|---------| | `Permission denied (publickey)` | 检查服务器`.ssh/authorized_keys`文件权限是否为600 | | 密钥路径不匹配 | 客户端通过`-i`参数显式指定私钥路径 | | SELinux限制 | 执行`restorecon -Rv ~/.ssh` | | 防火墙阻断 | 确认22端口开放:`sudo ufw allow 22` | --- #### 四、高级配置 1. **多服务器管理** 在`~/.ssh/config`中配置别名: ```config Host myserver HostName 192.168.1.100 User ubuntu IdentityFile ~/.ssh/mycustom_key ``` 直接通过`ssh myserver`连接[^5] 2. **禁用密码登录(生产环境建议)** 修改`/etc/ssh/sshd_config`: ```config PasswordAuthentication no ChallengeResponseAuthentication no ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值