欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-01 21:41:21
...

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()