Dennis Hoer Asked: 2019-04-15 19:22:47 +0800 CST2019-04-15 19:22:47 +0800 CST 2019-04-15 19:22:47 +0800 CST 如何从 shell 脚本将插座电源切换到 Eaton ePDU G3 772 我正在尝试通过 Jenkins CI shell 脚本使用 ssh 以编程方式将电源切换到 Eaton ePDU G3 上的多个插座。这是为了仅在 Jenkins 运行期间启动激光雷达。目前尚不清楚如何做到这一点。 ssh power-supply shell-script 1 个回答 Voted Best Answer Dennis Hoer 2019-04-15T19:22:47+08:002019-04-15T19:22:47+08:00 所以我想出了基于这个文档的语法: https ://www.eaton.com/content/dam/eaton/products/backup-power-ups-surge-it-power-distribution/power-distribution-for-it -equipment/eaton-metered-outlet-rack-pdu/eaton-pdu-g3-instruction-set-objects-manual.pdf 打开插座 #1: set PDU.OutletSystem.Outlet[1].DelayBeforeStartup 0 要关闭出口 #1: set PDU.OutletSystem.Outlet[1].DelayBeforeShutdown 0 现在让这些命令编写脚本会带来另一个问题,因为登录不会给你一个 bash shell,而是一个专有的 pdu 界面。 所以sshpass和expect救援。 这是在 Jenkinsfile 中工作的示例: post { always { sh """ # turn off left lidar expect -c 'spawn sshpass -p${PDU_CREDS_PSW} ssh -v -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oHostKeyAlgorithms=+ssh-dss ${PDU_CREDS_USR}@${PDU_IP}; expect pdu#0; send -- "set PDU.OutletSystem.Outlet\\[1\\].DelayBeforeShutdown 0\\r"; expect pdu#0; send -- "quit\\r"; expect eof' # turn off right lidar expect -c 'spawn sshpass -p${PDU_CREDS_PSW} ssh -v -oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oHostKeyAlgorithms=+ssh-dss ${PDU_CREDS_USR}@${PDU_IP}; expect pdu#0; send -- "set PDU.OutletSystem.Outlet\\[2\\].DelayBeforeShutdown 0\\r"; expect pdu#0; send -- "quit\\r"; expect eof' """ } } 注意: sshpass用于传递密码,因为 ssh 私钥不是一个选项 expect用于编写交互脚本https://linux.die.net/man/1/expect HostKeyAlgorithms=+ssh-dss需要额外的 ssh 标志 需要双反斜杠\\才能在 Jenkinsfile 中正常工作
所以我想出了基于这个文档的语法: https ://www.eaton.com/content/dam/eaton/products/backup-power-ups-surge-it-power-distribution/power-distribution-for-it -equipment/eaton-metered-outlet-rack-pdu/eaton-pdu-g3-instruction-set-objects-manual.pdf
打开插座 #1:
要关闭出口 #1:
现在让这些命令编写脚本会带来另一个问题,因为登录不会给你一个 bash shell,而是一个专有的 pdu 界面。
所以
sshpass
和expect
救援。这是在 Jenkinsfile 中工作的示例:
注意:
sshpass
用于传递密码,因为 ssh 私钥不是一个选项expect
用于编写交互脚本https://linux.die.net/man/1/expectHostKeyAlgorithms=+ssh-dss
需要额外的 ssh 标志\\
才能在 Jenkinsfile 中正常工作