SSH两种免密登录方式实操教程(密钥认证+sshpass明文登录)
在Linux服务器日常运维、远程连接、容器批量管理工作中,频繁输入服务器密码不仅操作繁琐、效率低下,还容易因密码输入错误导致连接失败。为解决这一问题,行业内主流使用两种SSH免密登录方案,分别是SSH密钥认证登录和sshpass明文密码免密登录。其中密钥认证为生产环境标准推荐方案,安全稳定;sshpass明文登录仅适用于内网临时测试场景,存在密码泄露风险,严禁用于公网服务器。本文将详细讲解两种方式的完整部署步骤、容器一键登录用法及核心使用注意事项。
一、SSH密钥免密登录(正式环境首选、安全无风险)
SSH密钥认证是目前运维行业公认的正规免密登录方式,其原理是通过本地生成公私钥对,将公钥上传至远程服务器。本地私钥留存用于身份校验,服务器匹配公私钥一致性后,无需密码即可完成登录,全程无明文密码传输,安全性极高,适配所有线上服务器、长期运维场景。
步骤1:本地生成安全密钥对
推荐使用安全性更高的ed25519算法生成密钥(替代传统RSA算法,加密强度更高、体积更小),直接在本地终端执行命令:
bash
ssh-keygen -t ed25519
执行后全程默认回车即可,无需设置密钥密码,系统会自动在本地 .ssh 目录下生成私钥和公钥文件,私钥需妥善保管,禁止泄露、复制给他人。若本地已生成过密钥,可直接跳过此步骤。
步骤2:推送公钥至远程服务器
通过 ssh-copy-id 命令一键将本地公钥同步到目标服务器,自动完成免密配置,命令格式如下:
bash
ssh-copy-id root@服务器IP
首次执行需输入一次服务器登录密码,验证通过后,公钥会自动写入服务器授权文件,后续永久免密登录该服务器。
步骤3:一键远程登录服务器容器
日常运维中,多数服务部署在Docker容器内,该方案支持一键SSH连接宿主机并直接进入容器终端,无需多次跳转。
普通权限容器一键登录命令:
bash
ssh root@服务器IP “docker exec -it 容器名 /bin/bash”
带sudo权限的容器登录命令(适用于普通账号无docker权限场景):
bash
ssh -t root@服务器IP “sudo docker exec -it 容器名 /bin/bash”
二、sshpass明文密码免密登录(临时内网使用、不推荐)
sshpass是一款辅助SSH登录的工具,核心作用是通过命令行明文携带服务器密码,自动填充登录验证,实现免密登录。该方式安全性极差,密码会直接暴露在命令行和系统进程列表中,仅可用于内网测试、临时自动化调试场景,绝对禁止用于公网生产服务器。
步骤1:安装sshpass工具
不同Linux系统安装命令不同,根据服务器系统选择对应指令安装:
CentOS/RHEL系列服务器执行:
bash
yum install sshpass -y
Ubuntu/Debian系列服务器执行:
bash
apt install sshpass -y
步骤2:明文密码免密登录容器
安装完成后,可直接通过一条命令实现“免密登录宿主机+进入容器”,将命令中的密码、服务器IP、容器名替换为自身实际信息即可:
bash
sshpass -p ‘你的服务器密码’ ssh root@服务器IP “docker exec -it 容器ID/容器名 /bin/bash”
三、通用核心注意事项
1. 终端适配问题:部分精简版Docker容器未预装 bash 终端,执行登录命令会报错,此时只需将命令末尾的 /bin/bash 替换为 /bin/sh 即可正常登录。
2. 安全边界区分:密钥认证无任何安全隐患,可长期使用、批量部署;sshpass明文模式密码会被 ps 进程命令抓取,仅适合单次、内网临时测试,用完即弃。
3. 权限问题:若远程账号无Docker执行权限,必须添加 sudo 参数,同时确保账号已配置sudo免密,否则远程执行命令会交互报错。
4. 场景选型准则:正式运维、脚本自动化、服务器长期管理必须使用密钥认证;仅临时调试、内网快速测试可短暂使用sshpass方案。
四、两种方式对比总结
密钥认证依靠非对称加密算法校验身份,无明文密码泄露风险、稳定性强、适配所有场景,是企业运维标准配置;sshpass通过明文密码自动填充实现免密,配置简单、上手快速,但存在致命安全漏洞,仅作为临时备用方案。运维工作中需严格区分场景,规范使用对应的免密登录方式,兼顾效率与服务器安全。


↑更多内容请识别二维码访问SKYPIEA官网↑
↑关注微信公众号↑
关注、点赞、转发,让更多人发现此公众号↓
夜雨聆风