当前位置: 首页 > news >正文

SSH免密登录的5种实现方法

SSH免密登录的5种实现方法

引言
在日常开发和运维工作中,频繁输入SSH密码是一件繁琐且低效的事情。本文将详细介绍5种实现SSH免密登录的方法,从基础配置到高级技巧,满足不同场景下的安全需求。

一、SSH密钥认证(推荐方案)

SSH密钥认证是通过生成公钥-私钥对来替代传统密码登录的方式,安全性更高且无需手动输入密码。

步骤:

  1. 生成密钥对(本地执行)

    ssh-keygen -t rsa -b 4096
    

    按提示回车即可,默认会在~/.ssh/目录下生成id_rsa(私钥)和id_rsa.pub(公钥)。

  2. 复制公钥到服务器

    ssh-copy-id username@server_ip
    

    此命令会自动将公钥添加到服务器的~/.ssh/authorized_keys文件中。

  3. 测试登录

    ssh username@server_ip
    

    ✅ 成功登录则配置完成。

二、SSH配置文件优化(懒人方案)

通过配置~/.ssh/config文件,可以简化SSH命令并自动应用密钥。

配置示例:

Host myserver  # 自定义别名HostName 192.168.1.100User adminIdentityFile ~/.ssh/id_rsa  # 指定私钥路径Port 22  # 可选,默认为22

使用方法:

ssh myserver  # 等同于 ssh admin@192.168.1.100
三、SSH代理转发(跳板机场景)

适用于需要通过中间服务器(跳板机)访问内部服务器的场景。

步骤:

  1. 本地开启代理转发

    ssh -A username@jump_server  # -A参数开启代理转发
    
  2. 从跳板机访问目标服务器

    ssh username@target_server  # 无需再次输入密码
    

原理:
代理转发会将本地的SSH密钥认证信息临时传递给跳板机,使其能够代表你访问其他服务器。

四、SSH密钥与脚本结合(自动化方案)

在脚本中使用SSH密钥认证,实现自动化任务。

示例脚本(Python):

import subprocessdef ssh_command(host, command):cmd = ['ssh','-i', '/path/to/private_key',  # 指定私钥f'username@{host}',command]result = subprocess.run(cmd, capture_output=True, text=True)return result.stdout, result.stderr# 使用示例
output, error = ssh_command('192.168.1.100', 'ls -l')
print(output)
五、临时明文密码方案(不推荐,但可用)

⚠️ 安全风险提示: 密码会以明文形式暴露在命令历史和进程列表中,仅建议在测试环境临时使用。

方法一:使用sshpass工具

# 安装sshpass(Ubuntu/Debian)
sudo apt-get install sshpass# 使用密码登录
sshpass -p 'your_password' ssh username@server_ip

方法二:使用expect脚本

#!/usr/bin/expect -f
spawn ssh username@server_ip
expect "password:"
send "your_password\r"
interact
安全最佳实践
  1. 定期更换密钥:建议每年更新一次SSH密钥。
  2. 限制私钥权限:确保私钥文件权限为600chmod 600 ~/.ssh/id_rsa)。
  3. 禁用root直接登录:修改服务器/etc/ssh/sshd_config,设置PermitRootLogin no
  4. 使用强密钥:生成密钥时使用-b 4096参数提高安全性。
  5. 结合防火墙:限制SSH端口(默认22)的访问来源。
常见问题排查
  1. 权限问题

    • 服务器~/.ssh目录权限应为700authorized_keys文件权限应为600
  2. 密钥不生效

    • 检查服务器/etc/ssh/sshd_config中是否启用了密钥认证:
      PubkeyAuthentication yes
      AuthorizedKeysFile .ssh/authorized_keys
      
    • 修改后重启SSH服务:sudo systemctl restart sshd
  3. 代理转发失败

    • 确保跳板机的/etc/ssh/sshd_config中允许代理转发:
      AllowAgentForwarding yes
      

总结
推荐优先使用SSH密钥认证+配置文件的组合方案,既能保证安全性,又能大幅提升操作效率。对于复杂网络环境,代理转发是解决多级登录的最佳选择。而明文密码方案仅应作为临时应急手段,避免在生产环境使用。

相关文章:

  • k8s初始化时候,报错无法通过 CRI(容器运行时接口)与 containerd 通信
  • 2025.05.10京东机考真题算法岗-第二题
  • 【数据结构】——栈和队列OJ
  • TCP核心机制
  • list基础用法
  • Docker疑难杂症解决指南
  • ThingsBoard3.9.1 MQTT Topic(4)
  • python常用算法总结(下)
  • 基于STM32、HAL库的TLV320AIC3101IRHBR音频接口芯片驱动程序设计
  • [250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
  • webservice获取全国省份区县编码(拼音全拼+拼音简写)
  • linux 抓包工具tcpdump使用小记(使用时注意权限和系统资源)
  • OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——mqtt库
  • 时间序列预测建模的完整流程以及数据分析【学习记录】
  • 从零开始了解数据采集(二十七)——什么IIOT平台
  • 源码分析之Leaflet中GeoJSON模块
  • 信息学奥赛一本通 1535:【例 1】数列操作
  • 信奥赛-刷题笔记-队列篇-T2-P1540机器翻译和P2952Cow Line S
  • 品种亮相!贵州金桥药业筑牢市场竞争护城河
  • MATLAB语音情感识别神经网络方法
  • 福建厦门市副市长、市公安局局长陈育煌出任吉林省公安厅厅长
  • 加强战略矿产出口全链条管控工作部署会召开
  • 著名学者黄修己去世,享年90岁
  • 中山大学人类学系原系主任冯家骏逝世,享年95岁
  • 印称一名高级官员在巴基斯坦发动的袭击中死亡
  • 中国金茂新任命三名副总裁,撤销区域公司