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

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

This question already has answers here:
Evaluating a remote (Paramiko) ssh command’s output into a success/failure boolean

我正在远程主机内执行gcloud命令。
但是,当我尝试使用ssh.exec_command执行任何命令时,该命令似乎已执行。但是我如何确保它正确执行。
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname = HOSTNAME,username = USERNAME,key_filename = FILENAME)
firewall_list = [gke-cluster-XXX-all,gke-cluster-XXX-ssh,gke-cluster-XXX-vms]
cmd = ‘gcloud compute firewall-rules delete’+firewall_list
stdin,stdout,stderr = ssh.exec_command(cmd)
ssh.close()
如何检查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()的内容,但这通常不是必需的。

该部分内容参考:
https://www.coder.work/article/7334306

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
前端无法直接与SSH进行对接,因为SSH连接需要在后端服务器上进行建立和执行,前端无法直接进行此操作。你需要在后端服务器上建立SSH连接,然后通过后端API与前端进行对接。 具体实现方式如下: 1. 在后端服务器上建立SSH连接,可以使用paramiko库实现: ``` import paramiko ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('remote_host', username='username', password='password') ``` 2. 定义后端API,在API中调用SSH连接并执行相关命令: ``` from flask import Flask, request import paramiko app = Flask(__name__) @app.route('/execute_command', methods=['POST']) def execute_command(): command = request.json.get('command') ssh = paramiko.SSHClient() ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) ssh.connect('remote_host', username='username', password='password') stdin, stdout, stderr = ssh.exec_command(command) output = stdout.read().decode() ssh.close() return {'output': output} if __name__ == '__main__': app.run() ``` 3. 在前端中调用后端API: ``` const executeCommand = async () => { const command = 'sh /text/text.sh'; const response = await fetch('/execute_command', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ command }) }); const result = await response.json(); console.log(result.output); } ``` 这样就可以实现前端按钮与后端SSH连接的对接了。需要注意的是,为了保证SSH连接的安全性,建议将SSH连接的用户名和密码等敏感信息存储在后端的环境变量中,在代码中通过读取环境变量来获取这些信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值