禁用SSH密钥场景下,如何用~/.ssh/config实现密码重放免两次输密?
SSH密码重放配置方案(适配堡垒机跳转场景)
前置要求
首先得安装sshpass工具——SSH本身不支持密码重放,依赖这个工具处理密码传递:
- Debian/Ubuntu系:
sudo apt install sshpass - RHEL/CentOS系:
sudo yum install sshpass
~/.ssh/config 完整配置
将以下内容写入~/.ssh/config,替换对应参数即可:
# 堡垒机基础配置 Host bastion HostName bastion.example.com User acme PasswordAuthentication yes PubkeyAuthentication no # 强制禁用密钥对,符合POC要求 # 目标主机跳转+密码重放配置 Host machine HostName machine.example.com User acme PasswordAuthentication yes PubkeyAuthentication no # 通过堡垒机建立隧道,用sshpass将密码传递给堡垒机的SSH连接 ProxyCommand sshpass -p "$SSH_PASSWORD" ssh -W %h:%p bastion # 保留自定义命令传递能力,%command%会替换为执行ssh时传入的命令 RemoteCommand %command%
使用步骤
1. 自动登录目标主机(跳过两次密码输入)
先临时设置环境变量存储密码(避免明文写入配置文件):
export SSH_PASSWORD="你的90天过期密码"
随后直接执行命令登录:
ssh machine
此时会自动用环境变量中的密码先连接堡垒机,再跳转至目标主机,全程无需手动输入密码。
2. 向目标主机传递命令/脚本执行
比如要在目标机上执行df -h查看磁盘使用情况:
export SSH_PASSWORD="你的90天过期密码" ssh machine df -h
传递本地脚本到目标机执行的方式:
export SSH_PASSWORD="你的90天过期密码" cat your_local_script.sh | ssh machine bash
关键说明
- 环境变量
SSH_PASSWORD仅在当前终端会话有效,退出后自动失效,比写入配置文件更安全 - 完全符合POC限制:禁用SSH密钥对、使用过期密码、实现密码重放、支持命令/脚本传递
- 若系统限制使用
sshpass,可改用expect脚本替代,但sshpass是最轻量化的实现方案
内容的提问来源于stack exchange,提问作者Hare Krshn
相关产品推荐
相关产品推荐

