酷徒LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:Windows  Window  remote-management  Winrm  MAN  
Python library for Windows Remote Management

  • 源代码名称:pywinrm
  • 源代码网址:http://www.github.com/diyan/pywinrm
  • pywinrm源代码文档
  • pywinrm源代码下载
  • Git URL:
    git://www.github.com/diyan/pywinrm.git
  • Git Clone代码到本地:
    git clone http://www.github.com/diyan/pywinrm
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/diyan/pywinrm
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • pywinrm

    pywinrm是 Windows 远程管理( WinRM ) 服务的python 客户端。 它允许你从任何可以运行 python的机器上调用目标 Windows 机器上的命令。

    WinRM允许你远程执行各种管理任务。 这些包括,但不限于: 运行批处理脚本,powershell脚本和获取WMI变量。

    Ansible 用于 Windows 支持。

    有关WinRM的详细信息,请访问microsoft网站的 WinRM。

    要求

    安装

    使用对基本。证书和NTLM身份验证的支持安装 pywinrm,仅需

    $ pip install pywinrm

    使用Kerberos身份验证,你需要这些可选的依赖项

    # for Debian/Ubuntu/etc:$ sudo apt-get install gcc python-dev libkrb5-dev
    $ pip install pywinrm[kerberos]# for RHEL/CentOS/etc:$ sudo yum install gcc python-devel krb5-devel krb5-workstation
    $ pip install pywinrm[kerberos]

    要使用CredSSP身份验证,你需要这些可选的依赖项

    # for Debian/Ubuntu/etc:$ sudo apt-get install gcc python-dev libssl-dev
    $ pip install pywinrm[credssp]# for RHEL/CentOS/etc:$ sudo yum install gcc python-devel openssl-devel
    $ pip install pywinrm[credssp]

    示例用法

    在远程主机上运行进程

    import winrm
    s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
    r = s.run_cmd('ipconfig', ['/all'])>>> r.status_code0>>> r.std_out
    Windows IP Configuration
     Host Name.. . . . . . . . . . . : WINDOWS-HOST Primary Dns Suffix. . . . . . . :
     Node Type.. . . . . . . . . . . : Hybrid
     IP Routing Enabled... . . . . . : No
     WINS Proxy Enabled... . . . . . : No...>>> r.std_err

    注意:pywinrm将尝试从以下格式中猜测正确的端点 url:

    在远程主机上运行Powershell脚本

    import winrm
    ps_script ="""$strComputer = $HostClear$RAM = WmiObject Win32_ComputerSystem$MB = 1048576"Installed Memory:" + [int]($RAM.TotalPhysicalMemory/$MB) +" MB" """s = winrm.Session('windows-host.example.com', auth=('john.smith', 'secret'))
    r = s.run_ps(ps_script)>>> r.status_code0>>> r.std_out
    Installed Memory: 3840MB>>> r.std_err

    在发送到 Windows 主机之前,Powershell脚本将是 base64 UTF16小endian编码。 将错误消息从 Powershell CLIXML格式转换为可以读的格式,以便方便。

    使用具有域用户的低级API运行进程,禁用HTTPS证书验证

    from winrm.protocol import Protocol
    p = Protocol(
     endpoint='https://windows-host:5986/wsman',
     transport='ntlm',
     username=r'somedomainsomeuser',
     password='secret',
     server_cert_validation='ignore')
    shell_id = p.open_shell()
    command_id = p.run_command(shell_id, 'ipconfig', ['/all'])
    std_out, std_err, status_code = p.get_command_output(shell_id, command_id)
    p.cleanup_command(shell_id, command_id)
    p.close_shell(shell_id)

    有效传输选项

    pywinrm支持各种传输方法,以便与WinRM服务器进行身份验证。 在 transport 参数中支持的选项是:

    • basic: 基本身份验证仅适用于本地 Windows 帐户而非域帐户。 向服务器发送凭据时,凭据是base64编码的。
    • plaintext: 与基本认证相同。
    • certificate: 通过映射到服务器上的本地 Windows 帐户的证书进行身份验证。
    • ssl: 当与 cert_pemcert_key_pem 一起使用时,它将使用上面的证书。 如果不返回,将恢复为对HTTPS的基本认证。
    • kerberos: 将在客户端与服务器相同的域中使用Kerberos身份验证,并且安装了所需的依赖项。 目前,Kerberos票证需要使用kinit命令在pywinrm之外是 initiliased。
    • ntlm: 将对域和本地帐户使用NTLM身份验证。
    • credssp: 将对域和本地帐户使用CredSSP身份验证。 允许双跳身份验证。仅在HTTPS端点上工作,而不在HTTP端点上运行。

    加密

    默认情况下,WinRM不接受来自客户端的未加密消息,而Pywinrm当前有 2种方法来执行这里操作。

    • 使用HTTPS端点而不是 HTTP ( 推荐)
    • 使用NTLM或者CredSSP作为传输身份验证,将 message_encryption 设置为 auto 或者 always

    建议使用HTTPS端点加密发送到服务器的所有数据,包括凭据和所有传输身份验证类型。 可以使用这个脚本使用自签署证书轻松在WinRM上设置HTTPS端点,但是在生产环境中,这应该用你自己的进程进行加强。

    第二个选项是使用NTLM或者 CredSSP,并将 message_encryption arg 设置为 auto 或者 always 协议。 如果可用,将使用身份验证 gss api包装和展开方法来加密发送到服务器的消息内容。 这种加密形式独立于像TLS这样的传输层,目前仅受NTLM和CredSSP传输认证支持。 Kerberos目前没有可用的方法来实现这里目的。

    若要配置消息加密,可以在initialising协议时使用 message_encryption 参数。 这里选项有 3个值,如下所示。

    • auto: 默认情况下,只有在对is方法可以用且HTTPS不使用时才使用消息加密。
    • never: 即使不在HTTPS上也不会使用消息加密。
    • always: 即使在通过HTTPS运行时也将使用消息加密。

    如果将值设置为 always 并且传输选项不支持消息加密 换句话说,则Pywinrm将引发异常。

    如果你不使用HTTPS端点或者消息加密,则 Windows Server 将自动拒绝 Pywinrm。 可以更改 Windows Server 上的设置以允许未加密的消息和凭据,但这种高度不安全且不应在必要情况下使用。 要允许未加密的消息运行以下命令,请从cmd或者 powershell

    
    # from cmd
    
    
    winrm set winrm/config/service @{AllowUnencrypted="true"}
    
    
    
    # or from powershell
    
    
    Set-Item -Path"WSMan:localhostServiceAllowUnencrypted" -Value $true
    
    
    
    

    作为一个重复,绝对不应该用作你的凭据和消息将允许任何人看到在线上发送的内容。

    远程主机上启用 WinRM

    使用自签名证书( 包含防火墙规则) 启用HTTP和HTTPS上的WinRM:

    
    # from powershell:
    
    
    Invoke-Expression ((New-Object System.Net.Webclient).DownloadString('https://raw.githubusercontent.com/ansible/ansible/devel/examples/scripts/ConfigureRemotingForAnsible.ps1'))
    
    
    
    

    对测试使用( 包含防火墙规则) 启用WinRM通过 HTTP:

    
    winrm quickconfig
    
    
    
    

    启用WinRM基本身份验证对于域用户,必须使用 NTLM,Kerberos或者CredSSP身份验证( 默认情况下启用Kerberos和NTLM身份验证,但')。

    
    # from cmd:
    
    
    winrm set winrm/config/service/auth @{Basic="true"}
    
    
    
    

    启用身份验证。这允许双跳支持使你可以在远程主机运行命令时使用网络服务进行身份验证。 这里命令在Powershell中运行。

    Enable-WSManCredSSP-Role Server -ForceSet-Item-Path "WSMan:localhostServiceAuthCredSSP"-Value $true

    贡献者( 按字母顺序)

    • Alessandro Pilotti
    • Alexey Diyan
    • 克里斯 Church
    • Cournapeau
    • Gema Gomez
    • Jijo Varghese
    • 约旦 Borean
    • Juan J。Martinez
    • Lukas Bednar
    • Sabban
    • 克拉克克拉克
    • 戴维斯戴维斯
    • Maxim Kovgan
    • 近红外 Cohen
    • Dunnigan
    • Reina Abolofia

    要帮助- 发送请求请求。 我一定会接受好的请求请求。



    文章标签:Window  MAN  Windows  remote-management  Winrm  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备17041772号-2  |  如果智培  |  酷兔英语  |  帮酷