如何解决通过SSH执行需root权限操作时的sudo密码输入超时问题?
解决远程sudo密码输入失败的问题
你的脚本问题根源不是密码输入延迟不够,而是输入流被占用:sudo -S需要从标准输入读取密码,但你把remote-actions.sh通过重定向传给了bash -s的标准输入,导致sudo无法接收你手动输入的密码,才会快速触发多次尝试失败。下面是几种可行的解决办法:
方法1:配置sudo免密执行指定命令(推荐)
直接在远程服务器上给你的账号配置无需密码执行useradd,这是最安全可靠的自动化方式:
- 登录远程服务器,执行
sudo visudo(必须用visudo编辑,避免语法错误锁死sudo) - 在文件末尾添加一行:
${my_user_name} ALL=(ALL) NOPASSWD: /usr/sbin/useradd - 保存退出后,你的本地脚本就可以正常运行,无需输入sudo密码。
方法2:通过管道传递密码(不推荐,有安全风险)
如果临时需要快速测试,可以把密码通过管道传给sudo -S,但注意密码会暴露在命令历史或进程列表中:
修改本地脚本为:
# local script echo "你的sudo密码" | ssh -p 22 ${my_user_name}@${server_host} 'sudo -S bash -s' < remote-actions.sh ${new_user_name}
方法3:调整sudo密码缓存超时(仅缓解,不解决脚本自动执行问题)
如果只是想延长sudo密码的缓存时间(比如让你在一段时间内执行脚本无需重复输入),可以编辑sudoers:
- 执行
sudo visudo - 添加或修改一行:
这样你在输入一次sudo密码后的15分钟内,执行sudo命令无需再次输入,但脚本首次运行时还是需要手动输入密码,无法彻底解决自动化问题。Defaults timestamp_timeout=15 # 设置为15分钟,默认是5分钟
内容的提问来源于stack exchange,提问作者AlexGor
相关产品推荐
相关产品推荐

