Linux系统中如何设置SSH免密登录

发布时间:2022-01-24 10:14:07 作者:kk
来源:亿速云 阅读:177
# Linux系统中如何设置SSH免密登录

## 目录
1. [SSH免密登录概述](#1-ssh免密登录概述)
2. [SSH密钥对工作原理](#2-ssh密钥对工作原理)
3. [环境准备](#3-环境准备)
4. [生成SSH密钥对](#4-生成ssh密钥对)
5. [配置公钥到目标服务器](#5-配置公钥到目标服务器)
6. [权限设置要点](#6-权限设置要点)
7. [测试免密登录](#7-测试免密登录)
8. [常见问题排查](#8-常见问题排查)
9. [安全注意事项](#9-安全注意事项)
10. [高级配置技巧](#10-高级配置技巧)
11. [总结](#11-总结)

---

## 1. SSH免密登录概述

SSH(Secure Shell)是Linux系统中最常用的远程管理协议,传统密码登录方式存在暴力破解风险且操作繁琐。免密登录通过非对称加密技术实现安全认证,具有以下优势:

- 安全性:密钥认证比密码更难以暴力破解
- 便捷性:无需反复输入密码,适合自动化脚本
- 可靠性:避免因密码过期导致的连接中断

典型应用场景:
- 服务器集群管理
- 自动化部署(CI/CD)
- 定时任务执行
- 文件同步(如rsync)

## 2. SSH密钥对工作原理

SSH免密登录基于非对称加密体系:

客户端 服务端 |——– 公钥传输 ———–>| | | 将公钥存入 | | ~/.ssh/authorized_keys |<—– 加密挑战消息 ———–| | 用私钥解密并应答 | |——– 解密结果 ————>| | | 验证通过后建立连接


密钥类型说明:
- RSA:兼容性最好(推荐2048位以上)
- ECDSA:安全性更高但旧系统可能不支持
- Ed25519:最先进的算法(OpenSSH 6.5+)

## 3. 环境准备

### 3.1 确认SSH服务状态
```bash
# 检查客户端SSH
$ ssh -V
OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022

# 检查服务端SSH服务
$ sudo systemctl status sshd

3.2 网络连通性测试

$ ping target-server
$ telnet target-server 22  # 检查端口开放

4. 生成SSH密钥对

4.1 基本生成命令

$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

参数说明: - -t:指定密钥类型 - -b:密钥位数(RSA建议至少2048) - -C:注释信息(通常用邮箱标识)

4.2 生成过程示例

Generating public/private rsa key pair.
Enter file in which to save the key (/home/user/.ssh/id_rsa): 
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/user/.ssh/id_rsa
Your public key has been saved in /home/user/.ssh/id_rsa.pub

4.3 密钥文件说明

5. 配置公钥到目标服务器

5.1 手动复制方法

$ ssh-copy-id -i ~/.ssh/id_rsa.pub user@remote-host

5.2 手动配置步骤

  1. 复制公钥内容:
$ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2E... user@host
  1. 登录目标服务器:
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
$ echo "公钥内容" >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys

5.3 多密钥管理

当需要为不同服务器使用不同密钥时:

# ~/.ssh/config 示例
Host server1
    HostName 192.168.1.100
    User admin
    IdentityFile ~/.ssh/server1_key

Host github.com
    User git
    IdentityFile ~/.ssh/github_key

6. 权限设置要点

正确的文件权限至关重要:

# 客户端权限
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/id_rsa

# 服务端权限
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/authorized_keys

权限错误会导致的典型报错:

Permissions 0644 for '/home/user/.ssh/id_rsa' are too open.

7. 测试免密登录

7.1 基础测试

$ ssh user@remote-host

7.2 详细调试模式

$ ssh -vvv user@remote-host

成功连接后应看到:

Authenticated to remote-host ([IP]:22) using "publickey".

8. 常见问题排查

8.1 问题现象:仍需输入密码

8.2 问题现象:Connection refused

8.3 问题现象:Host key verification failed

9. 安全注意事项

9.1 私钥保护措施

9.2 服务器端安全加固

  1. 禁用root登录:
    
    PermitRootLogin no
    
  2. 限制登录用户:
    
    AllowUsers admin deploy
    
  3. 修改默认端口:
    
    Port 2222
    

9.3 定期维护建议

10. 高级配置技巧

10.1 跳板机配置

Host jumpbox
    HostName jump.example.com
    User admin
    IdentityFile ~/.ssh/jump_key

Host internal-server
    HostName 10.0.0.1
    User deploy
    ProxyJump jumpbox

10.2 限制命令执行

在authorized_keys中添加限制:

command="/bin/journalctl -u app" ssh-rsa AAAAB3Nza...

10.3 双因素认证

结合Google Authenticator:

AuthenticationMethods publickey,keyboard-interactive

11. 总结

SSH免密登录是Linux系统管理的必备技能,正确配置后可以: - 提高工作效率 - 增强系统安全性 - 实现自动化运维

建议实践路线: 1. 在测试环境练习完整流程 2. 为主力服务器配置免密登录 3. 学习Ansible等自动化工具时应用此技术

附录:常用命令速查表

命令 功能
ssh-keygen -l -f keyfile 查看密钥指纹
ssh-add -L 列出已加载密钥
ssh -T git@github.com 测试GitHub连接
scp -i keyfile local user@remote:path 安全文件传输

”`

推荐阅读:
  1. ssh免密登录及注意事项
  2. ssh-keygen免密登录

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

linux ssh

上一篇:Linux系统中如何安装Nmap图形化前端Zenmap

下一篇:Linux中怎么创建及管理LVM逻辑卷

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》