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

如何配置Jenkins在远程服务器执行Shell脚本时自动输入密码

Jenkins远程执行脚本自动输入密码的解决方案

方法1:用sshpass批量传递密码

  • 先在Jenkins所在服务器安装sshpass:Debian/Ubuntu用apt-get install sshpass,RHEL/CentOS用yum install sshpass
  • 直接用sshpass把密码传入远程执行流程,命令示例:
    sshpass -p "你的密码" ssh 用户名@远程IP 'bash -s' < 本地部署脚本.sh
    
  • 安全优化:别明文写密码,把密码存Jenkins凭据里:
    1. 进入Jenkins「凭据管理」,添加「用户名和密码」类型凭据,设置ID比如remote-deploy-cred
    2. 在任务的「构建环境」中勾选「使用秘密文本或文件」,绑定该凭据,设置环境变量名比如DEPLOY_CRED
    3. 执行命令改成:
    sshpass -p "${DEPLOY_CRED_PSW}" ssh ${DEPLOY_CRED_USR}@远程IP 'bash -s' < 本地部署脚本.sh
    

方法2:用expect自动响应密码提示

  • 编写expect脚本自动匹配密码请求,示例auto-pass.exp:
    #!/usr/bin/expect
    set password [lindex $argv 0]
    spawn ssh 用户名@远程IP /path/to/你的部署脚本.sh
    expect {
        "*密码:" {send "$password\r"; exp_continue}
        "*Password:" {send "$password\r"; exp_continue}
        eof
    }
    
  • 给脚本添加执行权限:chmod +x auto-pass.exp
  • 在Jenkins中调用时,结合凭据变量:
    ./auto-pass.exp "${DEPLOY_CRED_PSW}"
    
  • 这个方法能精准应对多次密码输入的场景,不管提示是中文还是英文。

方法3:配置sudo免密(需服务器管理员允许)

  • 如果服务器管理员同意,修改sudoers文件让你的用户免密执行指定命令:
    1. 在远程服务器上执行visudo
    2. 添加一行:你的用户名 ALL=(ALL) NOPASSWD: /path/to/脚本里的sudo命令1, /path/to/命令2
    3. 保存后,脚本里的sudo操作就不会再弹出密码提示
  • 注意:只给必要的命令开免密,别贪方便给所有命令授权,避免安全风险。

方法4:用Jenkins SSH插件简化连接

  • 安装Jenkins的「SSH plugin」插件
  • 进入Jenkins「系统设置」,添加远程服务器的SSH凭据(用户名+密码)
  • 在任务里选择「Execute shell script on remote host using ssh」,直接编写或调用部署脚本,插件会自动处理SSH连接的密码验证;如果脚本里有sudo需求,还是要结合上面的免密或expect方法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 20:15:34