我正在尝试通过 Jenkins CI shell 脚本使用 ssh 以编程方式切换 Eaton ePDU G3 上的多个插座的电源。这是为了仅在 Jenkins 运行期间启动激光雷达。目前还不清楚如何做到这一点。
答案1
要打开插座 #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/expectHostKeyAlgorithms=+ssh-dss
需要其他 ssh 参数\\
Jenkinsfile 中需要双反斜杠才能正常工作