解决Python paramiko 模块远程执行ssh 命令 nohup 不生

1. 引言

Python paramiko 模块是一个用于远程执行ssh命令的工具。然而,在使用paramiko执行命令时,有一些情况下会出现nohup命令不生效的问题。本文将重点讨论该问题的解决方案,并给出一些相关的代码示例。

2. 问题描述

通常情况下,使用paramiko模块执行ssh命令是没有问题的。但有时,在使用nohup命令后,命令却无法在远程机器上正常运行。这种情况可能会出现在paramiko的有限环境变量设置或命令执行方式导致的问题。

3. 解决方案

3.1 使用绝对路径

一个常见的原因是nohup命令在paramiko的环境变量中无法找到。为了避免这个问题,可以尝试使用nohup命令的绝对路径来执行命令。

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('remote_host', username='username', password='password')

# 使用绝对路径执行nohup命令

stdin, stdout, stderr = ssh.exec_command('/usr/bin/nohup command &')

通过使用绝对路径,确保了nohup命令可以在paramiko的环境变量中被正确识别。

3.2 使用 Shell Channel

另一种解决方案是使用paramiko的Shell Channel来执行命令。Shell Channel可以模拟一个真实的终端会话,这样命令执行的环境将与登录到机器上执行命令的环境相同。

import paramiko

ssh = paramiko.SSHClient()

ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())

ssh.connect('remote_host', username='username', password='password')

# 打开一个Shell Channel

channel = ssh.invoke_shell()

# 执行命令

channel.send('/usr/bin/nohup command &\n')

channel.send('exit\n')

# 获取命令的输出

output = channel.recv(1024)

使用Shell Channel,可以确保nohup命令以登录到机器上执行命令的方式运行,从而解决nohup不生效的问题。

4. 结论

通过本文的讨论,我们了解到了一些解决Python paramiko模块远程执行ssh命令nohup不生效的问题的方法。我们可以使用绝对路径来执行nohup命令,确保其在paramiko的环境变量中被正确识别。另外,使用Shell Channel可以模拟终端会话,从而解决nohup命令不生效的问题。

在实际应用中,根据具体情况选择合适的解决方案以确保命令的正常执行。这些解决方案都可以帮助我们更好地使用paramiko执行ssh命令。

后端开发标签