ssh 设置免密登录的命令
时间: 2025-05-20 12:33:53 浏览: 23
### SSH设置免密登录的命令及相关解决方案
#### **1. 生成SSH公私钥对**
在本地机器上生成一对RSA类型的公私钥,这是实现免密登录的基础。
```bash
ssh-keygen -t rsa
```
运行此命令后,默认会在`~/.ssh/`目录下生成两个文件:`id_rsa`(私钥) 和 `id_rsa.pub`(公钥)[^1]。如果希望自定义路径或密码,可以使用额外选项,例如:
```bash
ssh-keygen -t rsa -f ~/.ssh/my_custom_key -P "your_password"
```
---
#### **2. 将公钥复制到目标主机**
为了使源主机能够无密码访问目标主机,需要将源主机的公钥(`id_rsa.pub`)追加到目标主机的`~/.ssh/authorized_keys`文件中。
##### 方法一:使用`ssh-copy-id`工具
这是一个便捷的方式,适用于大多数Linux发行版。
```bash
ssh-copy-id 用户名@目标IP
```
执行该命令时,系统会提示输入目标主机的用户密码。完成后,公钥会被自动添加至目标主机的授权文件中[^2]。
> **注意事项**
- 如果遇到权限问题,可手动指定公钥路径:
```bash
ssh-copy-id -i ~/.ssh/id_rsa.pub 用户名@目标IP
```
##### 方法二:手动复制公钥
当无法使用`ssh-copy-id`时,可以通过以下步骤完成相同功能:
1. 登录到目标主机;
2. 创建`.ssh`目录(如果不存在),并更改其权限:
```bash
mkdir -p ~/.ssh && chmod 700 ~/.ssh
```
3. 编辑或新建`~/.ssh/authorized_keys`文件,粘贴源主机的公钥内容,并调整文件权限:
```bash
echo "public_key_content" >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
```
---
#### **3. 测试免密登录**
完成以上配置后,尝试从源主机连接目标主机以验证效果:
```bash
ssh 用户名@目标IP
```
如果没有被要求输入密码,则表明免密登录已成功配置[^3]。
---
#### **4. 多台主机间的互信配置**
对于分布式环境(如Hadoop集群),通常需要每台节点之间都能互相免密访问。此时可通过脚本批量分发公钥,或者利用`scp`命令逐一拷贝`authorized_keys`文件。
示例:假设有一组主机分别为`node1`, `node2`, 和`node3`,可以从任意一台作为起点,将其`~/.ssh/authorized_keys`同步到其他所有节点:
```bash
scp ~/.ssh/authorized_keys user@node2:.ssh/
scp ~/.ssh/authorized_keys user@node3:.ssh/
```
随后,在每一台接收方重复上述过程直至形成完整的信任链[^4]。
---
#### **5. 常见问题及其解决方法**
| 问题描述 | 可能原因 | 解决办法 |
|----------|-----------|------------|
| 连接仍然请求密码 | 公钥未正确导入;目标主机上的`sshd_config`未开启PubkeyAuthentication | 检查`/etc/ssh/sshd_config`: 确保有`PubkeyAuthentication yes`; 并重启服务:`service sshd restart` |
| 权限不足导致失败 | 文件或目录权限不当 | 设定正确的权限:<br>`chmod 700 ~/.ssh/<br>chmod 600 ~/.ssh/*` |
| 私钥受密码保护 | 初始化时设置了passphrase | 使用`ssh-agent`缓存解密后的私钥:<br>`eval "$(ssh-agent)"<br>ssh-add ~/.ssh/id_rsa` |
---
###
阅读全文
相关推荐


















