You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shell脚本中ssh命令弹出密码提示时如何自动传入回车键?

空密码SSH自动回车验证解决方案

你之前尝试的方案全部失效的核心原因是:ssh 出于安全设计,密码提示的输入默认直接从 /dev/tty 设备读取,不会接收标准输入(stdin)的内容,所以通过管道传给stdin的换行符无法被ssh识别。

以下是可行的实现方案:

方案1:使用sshpass工具(操作最简单)

sshpass是专门为非交互ssh密码验证设计的工具,直接指定空密码即可自动完成验证:

  • 先安装sshpass:
    Debian/Ubuntu系:apt install sshpass
    RHEL/CentOS系:yum install sshpass
  • 替换你的ssh调用语句为:
    sshpass -p '' ssh -t root@${host} ${command}
    

如果你的密码提示不是默认的password:,可以加-P参数指定匹配的提示字符串,比如sshpass -P "请输入密码:" -p '' ssh ...

方案2:使用expect实现交互模拟(通用性最强)

expect可以模拟终端交互,适配任意自定义的提示场景,不需要依赖sshpass,写如下脚本即可:

#!/usr/bin/expect
# 读取环境变量中的主机和命令参数
set host $env(host)
set command $env(command)
set timeout 15

# 启动ssh进程
spawn ssh -t root@$host $command
# 匹配密码提示
expect "password:"
# 发送回车符
send "\r"
# 交回终端控制权
interact

运行前先给脚本加可执行权限chmod +x ssh_auto_enter.exp,执行时传入环境变量即可:host=目标主机地址 command=要执行的命令 ./ssh_auto_enter.exp

内容的提问来源于stack exchange,提问作者Abhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 06:15:04