news 2026/6/9 23:35:26

使用SSH密钥实现免密登录远程服务器

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用SSH密钥实现免密登录远程服务器

文章目录

第1步:生成SSH密钥对及权限设置

1.1 生成密钥对

1.2 关键权限设置(立即执行)

1.3 验证密钥对生成

第2步:配置SSH Config文件及目录权限

2.1 确保SSH目录存在且权限正确

2.2 创建或编辑Config文件

2.3 添加服务器配置

2.4 设置Config文件权限(必须步骤!)

第3步:部署公钥到远程服务器

3.1 在本地复制公钥内容

3.2 登录服务器并配置(逐步执行)

步骤1:使用密码登录

步骤2:确保远程.ssh目录存在且权限正确

步骤3:编辑authorized_keys文件

步骤4:保存并设置关键权限

步骤5:验证文件内容

步骤6:退出服务器

3.3 自动化部署方法(使用ssh-copy-id)

第4步:测试连接及问题排查

4.1 基础测试

4.2 详细调试(如果失败)

4.3 常见权限问题排查表


第1步:生成SSH密钥对及权限设置

1.1 生成密钥对

在本地终端执行以下命令,生成安全强度高的 RSA 密钥对:

ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa

参数说明

  • -t rsa:指定密钥类型为 RSA

  • -b 4096:指定密钥长度为 4096 位(更安全)

  • -f ~/.ssh/id_rsa:指定生成的私钥文件路径和名称

执行过程示例

  • 使用空密码短语(直接回车)

  • 接受默认存储位置

1.2 关键权限设置(立即执行

生成密钥后,必须设置正确的权限:

# 设置私钥为仅自己可读写(600权限) chmod 600 ~/.ssh/id_rsa # 设置公钥权限(644权限即可) chmod 644 ~/.ssh/id_rsa.pub # 检查设置结果 ls -l ~/.ssh/id_rsa ~/.ssh/id_rsa.pub

预期正确输出

-rw------- 1 username staff 1766 Jan 01 10:00 /Users/username/.ssh/id_rsa
-rw-r--r-- 1 username staff 414 Jan 01 10:00 /Users/username/.ssh/id_rsa.pub

1.3 验证密钥对生成

# 确认两个文件都已生成 ls -la ~/.ssh/id_* # 查看公钥内容(用于后续步骤) cat ~/.ssh/id_rsa.pub

公钥内容应以ssh-rsa AAAAB3NzaC1yc2...开头。

第2步:配置SSH Config文件及目录权限

2.1 确保SSH目录存在且权限正确

# 如果~/.ssh目录不存在,则创建它 mkdir -p ~/.ssh # 设置.ssh目录权限为700(仅自己可访问) chmod 700 ~/.ssh # 验证目录权限 ls -ld ~/.ssh

应显示drwx------(700权限)。

2.2 创建或编辑Config文件

方法一:使用终端编辑器(推荐给熟悉终端的用户)

nano ~/.ssh/config

方法二:使用VSCode编辑器(适合习惯图形界面的用户)

  1. 打开VSCode

  2. Ctrl+P(或Cmd+P在Mac上)打开快速访问

  3. 输入~/.ssh/config并按回车

  4. 如果文件不存在,VSCode会提示创建新文件

  5. 编辑完成后按Ctrl+S(或Cmd+S)保存

(详细教程:VSCode远程开发实战:SSH连接服务器详解(附仙宫云平台示例))

注意:即使用VSCode编辑,仍需确保文件权限正确(见2.4节)

2.3 添加服务器配置

在配置文件中按以下格式输入内容:

Host my_server # 自定义别名 HostName your_server.com # 实际服务器地址 User your_username # 登录用户名 IdentityFile ~/.ssh/id_rsa # 指定私钥路径 Port 22 # SSH端口,默认可省略

配置示例(根据实际情况修改):

Host comfyui

HostName n8c7ouu39gjglrzo.ssh.x-gpu.com

Port 50387

User root

IdentityFile ~/.ssh/id_rsa # 私钥文件存储位置

2.4 设置Config文件权限(必须步骤!)

无论用哪种方式编辑,都必须设置正确权限:

# config文件权限应为600或644 chmod 600 ~/.ssh/config # 检查权限设置 ls -l ~/.ssh/config

应显示-rw-------(600权限)或-rw-r--r--(644权限)。

第3步:部署公钥到远程服务器

3.1 在本地复制公钥内容

方法A(Mac推荐)

pbcopy < ~/.ssh/id_rsa.pub # 无输出表示成功,公钥已复制到剪贴板

方法B(通用)

cat ~/.ssh/id_rsa.pub # 手动复制全部输出内容(从ssh-rsa到结尾)

3.2 登录服务器并配置(逐步执行)

步骤1:使用密码登录
ssh your_username@your_server.com # 输入密码登录
步骤2:确保远程.ssh目录存在且权限正确
# 创建.ssh目录(如果不存在) mkdir -p ~/.ssh # 设置严格的目录权限(必须为700) chmod 700 ~/.ssh # 验证权限 ls -ld ~/.ssh # 应显示:drwx------ 或 drwx------ # 进入.ssh目录 cd ~/.ssh
步骤3:编辑authorized_keys文件
# 使用nano编辑器(或vi) nano authorized_keys

在编辑器中:

  1. 将光标移动到文件末尾(如果文件已存在)

  2. 粘贴你的公钥内容(完整一行)

  3. 确保没有多余的空格、换行或注释

正确格式示例

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDx...(很长)...== username@local

步骤4:保存并设置关键权限
# 保存nano:Ctrl+O → Enter → Ctrl+X # 设置authorized_keys文件权限为600(必须!) chmod 600 authorized_keys # 检查权限设置 ls -l authorized_keys # 应显示:-rw------- 或 -rw------- # 检查目录权限(确保仍是700) ls -ld ~/.ssh # 应显示:drwx------ 或 drwx------
步骤5:验证文件内容
# 确认公钥已正确添加 cat authorized_keys # 应显示你刚才粘贴的内容,且为完整一行 # 统计行数(如果有多组密钥) wc -l authorized_keys
步骤6:退出服务器
exit

3.3 自动化部署方法(使用ssh-copy-id)

如果你知道服务器密码,可以使用一键部署:

ssh-copy-id -i ~/.ssh/id_rsa.pub your_username@your_server.com

参数说明

  • -i~/.ssh/id_rsa.pub:指定私钥文件的位置为~/.ssh/id_rsa.pub

执行过程示例

第4步:测试连接及问题排查

4.1 基础测试

# 使用配置的别名连接 ssh my_server

成功标志:无需输入密码,直接显示服务器命令行提示符。

本地终端:

vcode:

4.2 详细调试(如果失败)

# 显示详细的连接过程 ssh -vvv my_server 2>&1 | tail -30

关注输出中的关键信息:

  • Offering public key:客户端是否提供了密钥

  • Authentication succeeded:认证是否成功

  • Permission denied:权限相关问题

4.3 常见权限问题排查表

问题现象可能原因解决方案
仍要求输入密码authorized_keys权限错误chmod 600 ~/.ssh/authorized_keys
连接被拒绝.ssh目录权限过宽chmod 700 ~/.ssh
"Bad permissions"错误本地私钥权限错误chmod 600 ~/.ssh/id_rsa
认证失败但无错误authorized_keys文件格式错误检查是否为完整一行
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 13:22:35

CCS20高可用性架构构建:实际案例分享

从理论到实战&#xff1a;CCS20如何实现毫秒级无感切换&#xff1f;在轨道交通信号控制室里&#xff0c;一次控制器重启可能意味着列车延误&#xff1b;在变电站中&#xff0c;哪怕一秒的通信中断都可能导致保护误动。面对这些“零容忍”停机的关键系统&#xff0c;高可用性&am…

作者头像 李华
网站建设 2026/5/31 7:26:56

工业传感器采集系统:CubeMX+FreeRTOS配置详解

从零构建工业级传感器采集系统&#xff1a;CubeMX FreeRTOS 实战全解析在一间现代化的智能工厂里&#xff0c;成百上千个温度、压力、振动传感器实时监控着设备运行状态。一旦某个电机轴承温度异常升高&#xff0c;系统必须在毫秒内捕捉到这一信号&#xff0c;并触发预警流程—…

作者头像 李华
网站建设 2026/6/9 21:37:53

jscope实时波形显示优化策略:深度解析

jscope 实时波形显示优化实战&#xff1a;从数据采集到丝滑渲染的全链路调优你有没有遇到过这样的场景&#xff1f;在调试一个电机控制板时&#xff0c;ADC采样频率明明设到了10ksps&#xff0c;可打开 jscope 看波形——画面卡顿、跳变剧烈、甚至直接“断连”。刷新率低得像老…

作者头像 李华
网站建设 2026/6/10 11:46:08

项目应用中c++ spidev0.0 read值为255的解决方案

当/dev/spidev0.0读出全是255&#xff1f;一文搞懂SPI通信中的“假高电平”陷阱在做嵌入式Linux项目时&#xff0c;你有没有遇到过这种情况&#xff1a;明明代码写得清清楚楚&#xff0c;打开/dev/spidev0.0、调用read()函数去拿传感器数据&#xff0c;结果返回的每一个字节都是…

作者头像 李华
网站建设 2026/6/7 11:19:41

了解Java 数据结构【1】

Java 提供了丰富的数据结构来处理和组织数据。 Java 的 java.util 包中提供了许多这些数据结构的实现&#xff0c;可以根据需要选择合适的类。 以下是一些常见的 Java 数据结构&#xff1a; 数组&#xff08;Arrays&#xff09; 数组&#xff08;Arrays&#xff09;是一种基…

作者头像 李华
网站建设 2026/6/10 12:59:33

基于实际项目的PCB布局布线思路:初级应用示范

从一块电机驱动板看懂PCB布局的底层逻辑最近带一个新人做项目&#xff0c;他画完第一版直流电机驱动板后兴奋地拿给我看&#xff1a;“功能都连上了&#xff01;”可一上电问题就来了&#xff1a;MCU时不时复位、RS485通信在电机启动时直接中断、编码器计数跳变严重……最后还是…

作者头像 李华