如何通过 shell 脚本将插座电源切换至 Eaton ePDU G3

如何通过 shell 脚本将插座电源切换至 Eaton ePDU G3

我正在尝试通过 Jenkins CI shell 脚本使用 ssh 以编程方式切换 Eaton ePDU G3 上的多个插座的电源。这是为了仅在 Jenkins 运行期间启动激光雷达。目前还不清楚如何做到这一点。

答案1

因此我根据这个文档弄清楚了语法: 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 接口。

因此sshpassexpect去救援吧。

以下是 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 中需要双反斜杠才能正常工作

相关内容