如何检查ssh.exec_command执行成功与否?

问题描述

我正在远程主机内执行gcloud命令。 但是,当我尝试使用ssh.exec_command执行任何命令时,该命令似乎已执行。但是我如何确保它正确执行。

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
Metadata:
  namespace: default
  name: secret-creator
rules:
- apiGroups: [""]
  resources: ["secrets"]
  verbs: ["create"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
Metadata:
  name: role-binding
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: secret-creator
subjects:
- kind: ServiceAccount
  name: default
  namespace: default

如何检查ssh.exec_command执行成功?

谢谢

解决方法

有两种方法,但是通常来说,您应该使用以下命令评估正在执行的命令的退出代码:

stdout.channel.recv_exit_status()

请注意,这仅适用于马丁·普里克里(Martin Prikryl)提到的简短输出或快速命令,否则将导致死锁。

根据正在执行的命令,您可以检查零退出代码,也可以根据命令排除特定的退出代码。

cmd = 'gcloud compute firewall-rules delete'+firewall_list
stdin,stdout,stderr = ssh.exec_command(cmd)
# Verify this condition applies to your specific case
if stdout.channel.recv_exit_status() != 0:
   # error handling,your command was not succesful
ssh.close()

尽管不是首选方法,但是您也可以在stdout和stderr上验证readlines()或read()的内容,但这通常不是必需的。