Test Code

使用 paramiko 库远程执行 root 命令 - invoke_shell

2020-04-07

参考网址: http://docs.paramiko.org/en/stable/api/channel.html

  • 需求:
    • 使用普通用户登录到远程服务器
    • sudo到root用户,并执行指定命令
    • 获取命令的执行结果

#!/usr/bin/env python3
import paramiko,time

command = 'ls -al /tmp/ \n'
buff_size = 1024
wait_time = 1

def ssh_for_root_cmd_recv(channel,cmd):
    buff = bytes()
    channel.send(cmd)
    time.sleep(wait_time)

    while channel.recv_ready():
        resp = channel.recv(buff_size)
        buff += resp

    buff_list = (buff.decode('utf-8')).split('\n')

    return (buff_list[1:-1])


def ssh_for_root_cmd_run():
    ssh = paramiko.SSHClient()
    ssh.load_system_host_keys()
    ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
    ssh.connect('localhost', port=22, username='user1', key_filename='/home/user1/.ssh/test.pem', timeout=3,)
    chan = ssh.invoke_shell()

    # 过滤登录时的信息。
    time.sleep(wait_time)
    while chan.recv_ready():
        chan.recv(buff_size)
        # print((chan.recv(buff_size)).decode('utf-8'))

    # 切换到root用户
    ssh_for_root_cmd_recv(chan,'sudo su - \n')

    # 运行需要执行的root命令。
    cmd_resoult = ssh_for_root_cmd_recv(chan,command)

    chan.close()
    ssh.close()

    return (cmd_resoult)

if __name__ == '__main__':
    for resoult_line in ssh_for_root_cmd_run():
        print (resoult_line)

Tags: python
使用支付宝打赏
使用微信打赏

若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏

扫描二维码,分享此文章