当前位置: 移动技术网 > IT编程>开发语言>Java > Python - paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决

Python - paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决

2020年07月14日  | 移动技术网IT编程  | 我要评论

Python - paramiko 模块远程执行ssh 命令 nohup 不生效的问题解决


1、使用 paramiko 模块ssh 登陆到 linux 执行nohup命令不生效

# 执行命令
def command(ssh_config, cmd, result_print=None, nohup=False):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=ssh_config.hostname, port=ssh_config.port, username=ssh_config.username,
                password=ssh_config.password)
    print(ssh_config.hostname + '@' + ssh_config.username, ': ', cmd)
    stdin, stdout, stderr = ssh.exec_command(cmd)
    result = stdout.read()
    if result_print:
        lines = read_unicode(result)
        for line in lines:
            print(line)
    ssh.close()

因为执行完毕后,shell 会立即关闭通道

2、稍作修改,使用 invoke_shell

# 执行命令
def command(ssh_config, cmd, result_print=None, nohup=False):
    ssh = paramiko.SSHClient()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect(hostname=ssh_config.hostname, port=ssh_config.port, username=ssh_config.username,
                password=ssh_config.password)
    print(ssh_config.hostname + '@' + ssh_config.username, ': ', cmd)
    if nohup:
        cmd += ' & \n '
        invoke = ssh.invoke_shell()
        invoke.send(cmd)
        # 等待命令执行完成
        time.sleep(2)
    else:
        stdin, stdout, stderr = ssh.exec_command(cmd)
        result = stdout.read()
        if result_print:
            lines = read_unicode(result)
            for line in lines:
                print(line)
    ssh.close()


本文地址:https://blog.csdn.net/qq_15071263/article/details/107323963

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网