SSH无密码互信配置


一、以root用户登录,更改SSH的配置文件 /etc/ssh/sshd_config 

 RSAAuthentication yes # 启用 RSA 认证
 PubkeyAuthentication yes # 启用公钥私钥配对认证方式
 AuthorizedKeysFile .ssh/authorized_keys # 公钥文件路径
重启SSH服务: service sshd restart 

二、以无密码访问的用户执行如下命令建立公钥和私钥,提示输入时直接回车。

[root@localhost asg]# ssh-keygen -t rsa
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:
72:bb:4f:1d:ef:57:d0:7f:5a:40:f2:63:cc:77:6c:86 root@localhost.localdomain

默认公钥文件/root/.ssh/id_rsa.pub
默认私钥文件/root/.ssh/id_rsa
.ssh文件夹如果不存在,需要手动创建,并将权限改为700

 三、如果要和其他机器建立互信、让其他机器无密码访问本机,需要将其他机器的公钥拷贝到本机,并追加到文件/root/.ssh/authorized_keys,然后修改该文件权限为600.
scp  192.168.50.147:/root/.ssh/id_rsa.pub  /root/.ssh/147.pub
cat  /root/.ssh/147.pub >>/root/.ssh/authorized_keys
(147以root用户建立的公钥和私钥,本机就可以以root用户无密码ssh访问147)

四、SSH无密码验证的原理:
Master作为客户端,要实现无密码公钥认证,连接到服务器Salve上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Salve上。当Master通过SSH链接到Salve上时,Salve会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Salve,Salve确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,期间不需要手工输入密码,重要的过程是将Master上产生的公钥复制到Salve上。

 

<think>嗯,用户遇到了配置SSH互信后仍然需要输入密码的问题。从引用内容来看,这确实是SSH配置中常见的坑,尤其权限设置和PAM策略容易被忽略。用户可能正在管理多台Ubuntu服务器,需要批量操作或者搭建集群环境,这类问题会严重影响工作效率。 用户提供的三个引用很有价值:引用[1]指出目录权限问题,引用[2]展示完整配置流程但可能遗漏细节,引用[3]则揭示非root用户的系统级策略限制。需要把这些点系统化整合。 核心解决方向其实很清晰:先确认权限(用户主目录/.ssh/authorized_keys),再检查SELinux/PAM策略,最后验证密钥文件有效性。特别要注意用户是用su切换还是直接登录的,引用[1]强调必须原始用户操作权限修改,这点容易被忽视。 考虑到用户是技术人员,回复需要: 第一,给出可操作的检查清单,比如权限数字700和600必须精确 第二,解释原理帮助理解,比如为什么home目录权限过高会导致SSH拒绝 第三,补充引用没提到的点,比如ssh -v调试和authorized_keys文件格式 用户应该会需要立即执行的命令,所以每条解决方案都配上具体命令示例。另外ta可能遭遇不同场景(root/普通用户),解决方案要区分说明。最后主动提出延伸帮助很必要,这类问题往往需要具体日志分析。 </think>以下是配置 SSH 互信后仍需要密码的完整解决方案,综合引用内容并补充关键细节: --- ### **一、权限问题(最常见原因)** 1. **修复目录权限**(**务必在目标用户下操作**,不可用 `su` 切换后执行): ```bash chmod 700 ~/.ssh # 关键! chmod 700 $HOME # 用户主目录权限(易忽略!见引用[1]的例子) chmod 600 ~/.ssh/authorized_keys # 密钥文件权限 ``` **原理**:SSH 严格要求目录权限为 `700`(仅用户可读写),密钥文件为 `600`,否则直接拒绝认证[^1]。 2. **验证路径所有权**: ```bash ls -ld ~/ ~/.ssh ~/.ssh/authorized_keys ``` **输出要求**:所有路径的**所属用户**必须与登录用户一致(例如 `ubuntu:ubuntu`),否则用 `chown` 修复。 --- ### **二、配置问题** 1. **检查密钥是否正确写入**: ```bash cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys # 追加公钥到授权文件 ``` **注意**:避免手动复制粘贴可能引入换行符错误。 2. **确认服务端配置**(`/etc/ssh/sshd_config`): ```bash PubkeyAuthentication yes # 启用密钥认证 AuthorizedKeysFile .ssh/authorized_keys # 密钥路径正确 PasswordAuthentication no # 可选关闭密码登录(测试后启用) ``` 修改后重启 SSH:`sudo systemctl restart sshd` --- ### **三、扩展排查(其他常见原因)** 1. **SELinux 干扰**(CentOS/RHEL): ```bash sudo restorecon -Rv ~/.ssh # 修复安全上下文 ``` 2. **PAM 策略限制**(非 root 用户): - 检查 `/etc/pam.d/sshd` 和 `/etc/pam.d/system-auth` - **注释或修改**包含 `pam_succeed_if.so uid >= 1000` 的行(见引用[3]) 3. **文件权限递归问题**: ```bash chmod g-w,o-w $HOME # 确保主目录其他用户无写权限 ``` --- ### **四、调试命令** - **客户端调试**: ```bash ssh -vvv user@host # 查看详细的认证过程 ``` 关注 `Authentication refused` 或 `Permission denied` 错误线索。 - **服务端日志**: ```bash sudo tail -f /var/log/auth.log # Ubuntu/Debian sudo tail -f /var/log/secure # CentOS/RHEL ``` --- ### **解决方案总结** | **步骤** | **操作命令/检查点** | **关键点说明** | |--------------------|----------------------------------------|----------------------------------| | 1. 主目录权限 | `chmod 700 $HOME` | 用户主目录必须严格 700 | | 2. .ssh 权限 | `chmod 700 ~/.ssh` | 仅用户可访问 | | 3. 密钥文件权限 | `chmod 600 ~/.ssh/authorized_keys` | 禁止其他用户读取 | | 4. 文件所有权 | `chown -R user:user ~/.ssh` | 用户必须拥有所有权 | | 5. 服务端配置 | 检查 `PubkeyAuthentication yes` | 确保密钥认证已启用 | | 6. PAM 策略 | 注释 `pam_succeed_if.so` 限制策略 | 解决非 root 用户问题[^3] | > **重要提示**:所有权限修改必须**直接以目标用户登录操作**(非 `sudo` 或 `su` 切换),否则可能无效[^1]。 ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值