knife-windows 1.0.0.rc.1 → 1.0.0.rc.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +5 -5
  3. data/.travis.yml +20 -20
  4. data/CHANGELOG.md +75 -74
  5. data/DOC_CHANGES.md +323 -323
  6. data/Gemfile +12 -12
  7. data/LICENSE +201 -201
  8. data/README.md +393 -292
  9. data/RELEASE_NOTES.md +79 -74
  10. data/Rakefile +21 -16
  11. data/appveyor.yml +42 -42
  12. data/ci.gemfile +15 -15
  13. data/features/knife_help.feature +20 -20
  14. data/features/support/env.rb +5 -5
  15. data/knife-windows.gemspec +28 -28
  16. data/lib/chef/knife/bootstrap/windows-chef-client-msi.erb +247 -241
  17. data/lib/chef/knife/bootstrap_windows_base.rb +388 -368
  18. data/lib/chef/knife/bootstrap_windows_ssh.rb +110 -110
  19. data/lib/chef/knife/bootstrap_windows_winrm.rb +102 -113
  20. data/lib/chef/knife/core/windows_bootstrap_context.rb +361 -362
  21. data/lib/chef/knife/knife_windows_base.rb +33 -0
  22. data/lib/chef/knife/windows_cert_generate.rb +155 -155
  23. data/lib/chef/knife/windows_cert_install.rb +68 -68
  24. data/lib/chef/knife/windows_helper.rb +36 -36
  25. data/lib/chef/knife/windows_listener_create.rb +107 -107
  26. data/lib/chef/knife/winrm.rb +212 -191
  27. data/lib/chef/knife/winrm_base.rb +118 -125
  28. data/lib/chef/knife/winrm_knife_base.rb +218 -201
  29. data/lib/chef/knife/winrm_session.rb +80 -71
  30. data/lib/chef/knife/winrm_shared_options.rb +47 -47
  31. data/lib/chef/knife/wsman_endpoint.rb +44 -44
  32. data/lib/chef/knife/wsman_test.rb +96 -96
  33. data/lib/knife-windows/path_helper.rb +234 -234
  34. data/lib/knife-windows/version.rb +6 -6
  35. data/spec/assets/win_template_rendered_with_bootstrap_install_command.txt +217 -0
  36. data/spec/assets/win_template_rendered_without_bootstrap_install_command.txt +329 -0
  37. data/spec/assets/win_template_unrendered.txt +246 -0
  38. data/spec/functional/bootstrap_download_spec.rb +216 -140
  39. data/spec/spec_helper.rb +87 -72
  40. data/spec/unit/knife/bootstrap_options_spec.rb +146 -146
  41. data/spec/unit/knife/bootstrap_template_spec.rb +92 -92
  42. data/spec/unit/knife/bootstrap_windows_winrm_spec.rb +240 -161
  43. data/spec/unit/knife/core/windows_bootstrap_context_spec.rb +151 -101
  44. data/spec/unit/knife/windows_cert_generate_spec.rb +90 -90
  45. data/spec/unit/knife/windows_cert_install_spec.rb +51 -51
  46. data/spec/unit/knife/windows_listener_create_spec.rb +76 -76
  47. data/spec/unit/knife/winrm_session_spec.rb +55 -46
  48. data/spec/unit/knife/winrm_spec.rb +504 -376
  49. data/spec/unit/knife/wsman_test_spec.rb +175 -175
  50. metadata +28 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1c29e2359b9d358c5351eed09ce0cd3012f6252c
4
- data.tar.gz: 86e873abc6246ca156e557dfa087e170d4ce53b3
3
+ metadata.gz: 1fdf254f2f79f700e43b3d75f73d3e4649a739bb
4
+ data.tar.gz: e677b1683e3f7f1487ac36e1d411c96cc83157e3
5
5
  SHA512:
6
- metadata.gz: 01daeb2230c7290c573a2401906a02929b54f82e3447289fe2bcd1bf0649133ebe41ff9830e7a5cc49f5c5b4b8b5b7deae3eb05a727419f97488b45298fa1398
7
- data.tar.gz: 586c6301b29e79aec969a5b6aab3bf6cc45c90cdb0e38be7449a56148d7b98db1ee0f9cce1c1a0de1e49a4d82eed891dfff805f6a5b70afc688fabac9374b96a
6
+ metadata.gz: 93d731e54802e7675980228efa3ccca1f55000c6dab01d9f9301258e4e72558d3a7374a98a39214a7d0e952a217bb0790c5b57fb6335dec902fce11340aa2b01
7
+ data.tar.gz: 1e21ba7c1dbeec72ac8396fb16ce64de8c180e913a8ba77158567cc9df92efb911e06b31281b4a1589a2645d53aaa0b77fd3ff0b7ab2a3bdc9bf5cf3274bc22b
data/.gitignore CHANGED
@@ -1,5 +1,5 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- ci.gemfile.lock
5
- pkg/*
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ ci.gemfile.lock
5
+ pkg/*
data/.travis.yml CHANGED
@@ -1,20 +1,20 @@
1
- language: ruby
2
-
3
- rvm:
4
- - 1.9.3
5
- - 2.0.0
6
-
7
- gemfile: ci.gemfile
8
-
9
- env:
10
- - CHEF_VERSION="master"
11
- - CHEF_VERSION="~> 12.0"
12
- - CHEF_VERSION="< 12"
13
-
14
- matrix:
15
- exclude:
16
- - rvm: 1.9.3
17
- env: CHEF_VERSION="master"
18
- - rvm: 1.9.3
19
- env: CHEF_VERSION="~> 12.0"
20
-
1
+ language: ruby
2
+
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+
7
+ gemfile: ci.gemfile
8
+
9
+ env:
10
+ - CHEF_VERSION="master"
11
+ - CHEF_VERSION="~> 12.0"
12
+ - CHEF_VERSION="< 12"
13
+
14
+ matrix:
15
+ exclude:
16
+ - rvm: 1.9.3
17
+ env: CHEF_VERSION="master"
18
+ - rvm: 1.9.3
19
+ env: CHEF_VERSION="~> 12.0"
20
+
data/CHANGELOG.md CHANGED
@@ -1,74 +1,75 @@
1
- # knife-windows Change Log
2
-
3
- ## Unreleased changes
4
-
5
- * [knife-windows #240](https://github.com/chef/knife-windows/pull/240) Change kerberos keytab short option to -T to resolve conflict
6
- * [knife-windows #232](https://github.com/chef/knife-windows/pull/232) Adding --hint option to bootstrap
7
- * [knife-windows #227](https://github.com/chef/knife-windows/issues/227) Exception: NoMethodError: undefined method 'gsub' for false:FalseClass
8
- * [knife-windows #222](https://github.com/chef/knife-windows/issues/222) Validatorless bootstrap support
9
- * [knife-windows #202](https://github.com/chef/knife-windows/issues/202) knife windows bootstrap should support enabling the service
10
- * [knife-windows #213](https://github.com/chef/knife-windows/pull/213) Search possibilities of HOME for bootstrap templates
11
- * [knife-windows #206](https://github.com/chef/knife-windows/pull/206) Add a flag msi_url that allows one to fetch the Chef client msi from a non-chef.io path
12
- * [knife-windows #192](https://github.com/chef/knife-windows/issues/192) deprecate knife bootstrap --distro
13
- * [knife-windows #159](https://github.com/opscode/knife-windows/issues/159) `winrm_port` option should default to 5986 if `winrm_transport` option is `ssl`
14
- * [knife-windows #149](https://github.com/chef/knife-windows/pull/149) Adding knife wsman test to validate WSMAN/WinRM availability
15
- * [knife-windows #139](https://github.com/opscode/knife-windows/issues/139) Force dev dependency on Chef 11 for test scenarios to avoid Ohai 8 conflict on Ruby 1.9.x
16
- * [knife-windows #126](https://github.com/opscode/knife-windows/pull/126) Allow disabling of SSL peer verification in knife-windows for testing
17
- * [knife-windows #154](https://github.com/opscode/knife-windows/issues/154) Unreleased regression in master: NameError: undefined local variable or method `path_separator
18
- * [knife-windows #143](https://github.com/opscode/knife-windows/issues/143) Unreleased regression in master: WinRM::WinRMHTTPTransportError: Bad HTTP response returned from server (503) in the middle of bootstrap
19
- * [knife-windows #133](https://github.com/opscode/knife-windows/issues/133) Bootstrap failure -- unable to validate SSL chef server endpoints
20
- * [knife-windows #132](https://github.com/opscode/knife-windows/issues/132) New subcommands for WinRM: windows listener create, cert generate, and cert install
21
- * [knife-windows #129](https://github.com/opscode/knife-windows/issues/129) New --winrm-authentication-protocol option for explicit control of authentication
22
- * [knife-windows #125](https://github.com/opscode/knife-windows/issues/125) knife-windows should use PowerShell first before cscript to download the Chef Client msi
23
- * [knife-windows #92](https://github.com/opscode/knife-windows/issues/92) EventMachine issue: knife bootstrap windows winrm error
24
- * [knife-windows #94](https://github.com/opscode/knife-windows/issues/94) Remove Eventmachine dependency
25
- * [knife-windows #252](https://github.com/chef/knife-windows/pull/252) Fail early on ECONNREFUSED, Closes #244.
26
-
27
- ## Release: 0.8.5
28
- * [knife-windows #228](https://github.com/chef/knife-windows/pull/228) make winrm-s dep more strict on knife-windows 0.8.x
29
-
30
- ## Release: 0.8.4
31
- * [knife-windows #133](https://github.com/opscode/knife-windows/issues/133) Bootstrap failure -- unable to validate SSL chef server endpoints
32
-
33
- ## Release: 0.8.3
34
- * [knife-windows #131](https://github.com/opscode/knife-windows/issues/108) Issue #131: Windows should be bootstrapped using latest Chef Client version compatible with knife's version just like non-Windows systems
35
- * [knife-windows #139](https://github.com/opscode/knife-windows/issues/139) Force dev dependency on Chef 11 for test scenarios to avoid Ohai 8 conflict on Ruby 1.9.x
36
-
37
- ## Release: 0.8.2
38
- * [knife-windows #108](https://github.com/opscode/knife-windows/issues/108) Error: Unencrypted communication not supported if remote server does not require encryption
39
-
40
- ## Release: 0.8.0
41
- * [knife-windows #98](https://github.com/opscode/knife-windows/issues/98) Get winrm command exit code if it is not expected
42
- * [knife-windows #96](https://github.com/opscode/knife-windows/issues/96) Fix break from OS patch KB2918614
43
- * Remove the 'instance data' method of creating EC2 servers
44
- * Update winrm-s dependency along with em-winrm and winrm dependencies
45
- * Return failure codes from knife winrm even when `returns` is not set
46
- * Support Windows negotiate authentication protocol when running knife on Windows
47
-
48
- ## Release: 0.6.0 (05/08/2014)
49
-
50
- * [KNIFE-386](https://tickets.opscode.com/browse/KNIFE-386) Wait for a valid command response before bootstrapping over WinRM
51
- * [KNIFE-394](https://tickets.opscode.com/browse/KNIFE-394) Update em-winrm dependency
52
- * [KNIFE-450](https://tickets.opscode.com/browse/KNIFE-450) Set knife winrm command exit status on exception and command failure
53
-
54
- **See source control commit history for earlier changes.**
55
-
56
- ## Selected release notes
57
- These are release notes from very early releases of the plugin. For recent
58
- releases (2014 and later), see the RELEASE_NOTES.md file of each tagged release branch.
59
-
60
- Release Notes - Knife Windows Plugin - Version 0.5.6
61
-
62
- ** New Feature
63
- * new default bootstrap template that installs Chef using official chef-client MSI installer
64
-
65
- Release Notes - Knife Windows Plugin - Version 0.5.4
66
-
67
- ** Bug
68
- * [KNIFE\_WINDOWS-7] - Exception: NoMethodError: undefined method `env_namespace' for Savon:Module
69
- * [KNIFE\_WINDOWS-8] - winrm based bootstrap fails with 'Bad HTTP response returned from server (500)'
70
-
71
-
72
- ** New Feature
73
- * [KNIFE\_WINDOWS-6] - default bootstrap template should support encrypted\_data\_bag\_secret
74
-
1
+ # knife-windows Change Log
2
+
3
+ ## Unreleased changes
4
+
5
+ * [knife-windows #240](https://github.com/chef/knife-windows/pull/240) Change kerberos keytab short option to -T to resolve conflict
6
+ * [knife-windows #232](https://github.com/chef/knife-windows/pull/232) Adding --hint option to bootstrap
7
+ * [knife-windows #227](https://github.com/chef/knife-windows/issues/227) Exception: NoMethodError: undefined method 'gsub' for false:FalseClass
8
+ * [knife-windows #222](https://github.com/chef/knife-windows/issues/222) Validatorless bootstrap support
9
+ * [knife-windows #202](https://github.com/chef/knife-windows/issues/202) knife windows bootstrap should support enabling the service
10
+ * [knife-windows #213](https://github.com/chef/knife-windows/pull/213) Search possibilities of HOME for bootstrap templates
11
+ * [knife-windows #206](https://github.com/chef/knife-windows/pull/206) Add a flag msi_url that allows one to fetch the Chef client msi from a non-chef.io path
12
+ * [knife-windows #192](https://github.com/chef/knife-windows/issues/192) deprecate knife bootstrap --distro
13
+ * [knife-windows #159](https://github.com/opscode/knife-windows/issues/159) `winrm_port` option should default to 5986 if `winrm_transport` option is `ssl`
14
+ * [knife-windows #149](https://github.com/chef/knife-windows/pull/149) Adding knife wsman test to validate WSMAN/WinRM availability
15
+ * [knife-windows #139](https://github.com/opscode/knife-windows/issues/139) Force dev dependency on Chef 11 for test scenarios to avoid Ohai 8 conflict on Ruby 1.9.x
16
+ * [knife-windows #126](https://github.com/opscode/knife-windows/pull/126) Allow disabling of SSL peer verification in knife-windows for testing
17
+ * [knife-windows #154](https://github.com/opscode/knife-windows/issues/154) Unreleased regression in master: NameError: undefined local variable or method `path_separator
18
+ * [knife-windows #143](https://github.com/opscode/knife-windows/issues/143) Unreleased regression in master: WinRM::WinRMHTTPTransportError: Bad HTTP response returned from server (503) in the middle of bootstrap
19
+ * [knife-windows #133](https://github.com/opscode/knife-windows/issues/133) Bootstrap failure -- unable to validate SSL chef server endpoints
20
+ * [knife-windows #132](https://github.com/opscode/knife-windows/issues/132) New subcommands for WinRM: windows listener create, cert generate, and cert install
21
+ * [knife-windows #129](https://github.com/opscode/knife-windows/issues/129) New --winrm-authentication-protocol option for explicit control of authentication
22
+ * [knife-windows #125](https://github.com/opscode/knife-windows/issues/125) knife-windows should use PowerShell first before cscript to download the Chef Client msi
23
+ * [knife-windows #92](https://github.com/opscode/knife-windows/issues/92) EventMachine issue: knife bootstrap windows winrm error
24
+ * [knife-windows #94](https://github.com/opscode/knife-windows/issues/94) Remove Eventmachine dependency
25
+ * [knife-windows #252](https://github.com/chef/knife-windows/pull/252) Fail early on ECONNREFUSED, Closes #244.
26
+ * [knife-windows #260](https://github.com/chef/knife-windows/pull/260) Fail quickly on invalid option combinations, Closes #259
27
+
28
+ ## Release: 0.8.5
29
+ * [knife-windows #228](https://github.com/chef/knife-windows/pull/228) make winrm-s dep more strict on knife-windows 0.8.x
30
+
31
+ ## Release: 0.8.4
32
+ * [knife-windows #133](https://github.com/opscode/knife-windows/issues/133) Bootstrap failure -- unable to validate SSL chef server endpoints
33
+
34
+ ## Release: 0.8.3
35
+ * [knife-windows #131](https://github.com/opscode/knife-windows/issues/108) Issue #131: Windows should be bootstrapped using latest Chef Client version compatible with knife's version just like non-Windows systems
36
+ * [knife-windows #139](https://github.com/opscode/knife-windows/issues/139) Force dev dependency on Chef 11 for test scenarios to avoid Ohai 8 conflict on Ruby 1.9.x
37
+
38
+ ## Release: 0.8.2
39
+ * [knife-windows #108](https://github.com/opscode/knife-windows/issues/108) Error: Unencrypted communication not supported if remote server does not require encryption
40
+
41
+ ## Release: 0.8.0
42
+ * [knife-windows #98](https://github.com/opscode/knife-windows/issues/98) Get winrm command exit code if it is not expected
43
+ * [knife-windows #96](https://github.com/opscode/knife-windows/issues/96) Fix break from OS patch KB2918614
44
+ * Remove the 'instance data' method of creating EC2 servers
45
+ * Update winrm-s dependency along with em-winrm and winrm dependencies
46
+ * Return failure codes from knife winrm even when `returns` is not set
47
+ * Support Windows negotiate authentication protocol when running knife on Windows
48
+
49
+ ## Release: 0.6.0 (05/08/2014)
50
+
51
+ * [KNIFE-386](https://tickets.opscode.com/browse/KNIFE-386) Wait for a valid command response before bootstrapping over WinRM
52
+ * [KNIFE-394](https://tickets.opscode.com/browse/KNIFE-394) Update em-winrm dependency
53
+ * [KNIFE-450](https://tickets.opscode.com/browse/KNIFE-450) Set knife winrm command exit status on exception and command failure
54
+
55
+ **See source control commit history for earlier changes.**
56
+
57
+ ## Selected release notes
58
+ These are release notes from very early releases of the plugin. For recent
59
+ releases (2014 and later), see the RELEASE_NOTES.md file of each tagged release branch.
60
+
61
+ Release Notes - Knife Windows Plugin - Version 0.5.6
62
+
63
+ ** New Feature
64
+ * new default bootstrap template that installs Chef using official chef-client MSI installer
65
+
66
+ Release Notes - Knife Windows Plugin - Version 0.5.4
67
+
68
+ ** Bug
69
+ * [KNIFE\_WINDOWS-7] - Exception: NoMethodError: undefined method `env_namespace' for Savon:Module
70
+ * [KNIFE\_WINDOWS-8] - winrm based bootstrap fails with 'Bad HTTP response returned from server (500)'
71
+
72
+
73
+ ** New Feature
74
+ * [KNIFE\_WINDOWS-6] - default bootstrap template should support encrypted\_data\_bag\_secret
75
+
data/DOC_CHANGES.md CHANGED
@@ -1,323 +1,323 @@
1
- <!---
2
- This file is reset every time a new release is done. This file describes changes that have not yet been released.
3
-
4
- Example Doc Change:
5
- ### Headline for the required change
6
- Description of the required change.
7
- -->
8
- # knife-windows 1.0.0 doc changes
9
-
10
- ### WinRM default port default change
11
- The `winrm_port` option specifies the TCP port on the remote system to which
12
- to connect for WinRM communication for `knife-windows` commands that use
13
- WinRM. The default value of this option is **5986** if the WinRM transport
14
- (configured by the `winrm_transport` option) is SSL, otherwise it is **5985**.
15
- These defaults correspond to the port assignment conventions for the WinRM
16
- protocol, which is also honored by WinRM tools built-in to Windows such as the
17
- `winrs` tool.
18
-
19
- In previous releases, the default port was always 5985, regardless of the
20
- transport being used. To override the default, specify the `winrm_port`
21
- (`-p`) option and specify the desired port as the option's value.
22
-
23
- ### WinRM authentication protocol defaults to `negotiate` regardless of name formats
24
- Unless explicitly overridden using the new `winrm_authentication_protocol`
25
- option, `knife-windows` subcommands that use WinRM will authenticate using the
26
- negotiate protocol, just as the tools built-in to the Windows operating
27
- system would do.
28
-
29
- Previously, `knife-windows` would use basic authentication, unless the
30
- username specified to the `winrm_user` option had the format `domain\user`,
31
- and in that case `knife-windows` would use negotiate authentication.
32
-
33
- To override the new behavior, specify the `winrm_authentication_protocol`
34
- option with a value of either the `basic` or `kerberos` to choose a different
35
- authentication protocol.
36
-
37
- ### New `:winrm_authentication_protocol` option
38
-
39
- This option allows the authentication protocol used for WinRM communication to
40
- be explicitly specified. The supported protocol values are `kerberos`, `negotiate`,
41
- and `basic`, each of which directs `knife-windows` to use the respective authentication protocols.
42
-
43
- If the option is not specified, `knife-windows` treats this as a default value
44
- of `negotiate` and the tool uses negotiate authentication for WinRM.
45
-
46
- ### New `:winrm_ssl_verify_mode` option
47
- When running the `winrm` and `bootstrap windows` subcommands with the
48
- `winrm_transport` option set to `ssl` to communicate with a remote Windows system using
49
- the WinRM protocol via the SSL transport, you may disable `knife`'s verification of
50
- the remote system's SSL certificate. This is useful for testing or
51
- troubleshooting SSL connectivity before you've verified the certificate of the remote system's SSL WinRM listener.
52
-
53
- The option that controls whether the server is validated is the
54
- `knife[:winrm_verify_ssl_mode]` option, which has the same values as Chef's
55
- [`:ssl_verify_mode`](https://docs.getchef.com/config_rb_client.html#settings) option. By default, the option is set to `:verify_peer`,
56
- which means that SSL communication must be verified using a certificate file
57
- specified by the `:ca_trust_file` option. To avoid the need to have this file available
58
- during testing, you can specify the `knife[:winrm_ssl_verify_mode]` option in
59
- `knife.rb` OR specify it directly on the `knife` command line as
60
- `--winrm-ssl-verify-mode` and set its value to `:verify_none`, which will
61
- override the default behavior and skip the verification of the remote system
62
- -- there is no need to specify the `:ca_trust_file` option in this case.
63
-
64
- Here's an example that disables peer verification:
65
-
66
- knife winrm -m 192.168.0.6 -x 'mydomain\myuser' -P "$PASSWORDVAR" -t ssl --winrm-ssl-verify-mode verify_none ipconfig
67
-
68
- This option should be used carefully since disabling the verification of the
69
- remote system's certificate can subject knife commands to spoofing attacks.
70
-
71
- ### New subcommands to automate WinRM SSL listener configuration
72
- The WinRM protocol may be encapsulated by SSL, but the configuration of such
73
- connections can be difficult, particularly when the WinRM client is a
74
- non-Windows system. Three new knife subcommands have been implemented in
75
- knife-windows 1.0.0.rc.0 to simplify and automate this configuration:
76
-
77
- * `knife windows cert generate` subcommand:
78
- Generates certificates in formats useful for creating WinRM SSL listeners.
79
- It also generates a related public key file in .pem format to validating
80
- communication involving listeners configured with the generated certificate.
81
- * `knife windows cert install` subcommand:
82
- Installs a certificate such as one generated by the `cert generate`
83
- subcommand into the Windows certificate store so that it can be used as the
84
- SSL certificate for a WinRM listener. This command will only function on the
85
- Windows operating system. Certificates are always installed in the
86
- computer's personal store, i.e. the store that can be viewed via the
87
- PowerShell command `ls Cert:\LocalMachine\My`.
88
- * `knife windows listener create` subcommand:
89
- Creates a WinRM listener on a Windows system. This command functions only on
90
- the Windows operating system.
91
-
92
- #### Example WinRM listener configuration workflows
93
-
94
- The subcommands are used in the following scenarios
95
-
96
- ##### Creation of a new listener with a new SSL certificate
97
-
98
- This workflow assumes that WinRM is enabled on the system, which can be
99
- accomplished with the command
100
-
101
- winrm quickconfig
102
-
103
- If you're creating a listener and don't already have an SSL certificate with
104
- which to configure it, you can quickly create an enabled listener with a short
105
- sequence of commands. The example below assumes that the `knife-windows`
106
- plugin is being executed on a Windows system via the PowerShell command shell,
107
- and that the system is registered with the relevant DNS with the name
108
- `mysystem.myorg.org` and that this is the name with which the user would like
109
- to remotely access this system.
110
-
111
- This sequence of commands creates a listener -- it assumes the existence of the directory `winrmcerts`
112
- under the user's profile directory:
113
-
114
- knife windows cert generate --domain myorg.org --output-file $env:userprofile/winrmcerts/winrm-ssl
115
- knife windows listener create --hostname *.myorg.org --cert-install $env:userprofile/winrmcerts/winrm-ssl.pfx
116
-
117
- The first command, `cert generate`, may be executed on any computer (even one not running the
118
- Windows operating system) and produces three files. The first two are certificates containing
119
- private keys that should be stored securely. The 3rd is a `.pem` file
120
- containing the public key required to validate the server. This file may be
121
- shared. The command also outputs the thumbprint of the generated certificate,
122
- which is useful for finding the certificate in a certificate store or using
123
- with other commands that require the thumbprint.
124
-
125
- The next command, `listener create`, creates the SSL listener -- if it is executed on a different
126
- system than that which generated the certificates, the required certificate
127
- file **must** be transferred securely to the system on which the listener will
128
- be created. It requires a PKCS12 `.pfx` file for the `--cert-install` argument
129
- which is one of the files generated by the previous `cert generate` command.
130
-
131
- After these commands are executed, an SSL listener will be created listening
132
- on TCP port 5986, the default WinRM SSL port. Using PowerShell, the following
133
- command will show this and other listeners on the system:
134
-
135
- ls wsman:\localhost\listener
136
-
137
- As an alternative to the command sequence above, the `cert install` command could be used to install the
138
- certificate in a separate step, i which case the `--cert-install` option must
139
- be replaced with the `--cert-thumbprint` option to use the generated
140
- certificate's thumbprint to identify the certificate with which the listener
141
- should be configured:
142
-
143
- knife windows cert generate --domain myorg.org --output-file $env:userprofile/winrmcerts/winrm-ssl
144
- knife windows cert install $env:userprofile/winrmcerts/winrm-ssl
145
- knife windows listener create --hostname *.myorg.org --cert-thumbprint 1F3A70E2601FA1576BC4850ED2D7EF6587076423
146
-
147
- The system would then be in the same state as that after the original shorter
148
- command sequence.
149
-
150
- Note that the `cert install` command could be skipped if the certificate
151
- already exists in the personal certificate store of the computer. To view that store and
152
- see the thumbprints of certificates that could be used with the `listener
153
- create` command to create an SSL listener, the following PowerShell command
154
- may be executed:
155
-
156
- ls Cert:\LocalMachine\My
157
-
158
- ##### Connecting to a configured SSL listener
159
-
160
- In order to connect securely to the configured SSL listener via the `knife
161
- winrm` or `knife bootstrap windows winrm` subcommands, the workstation running
162
- `knife` must have a `.pem` file that contains the listener's public key, such
163
- as the one generated by `knife windows cert generate`. If the file was
164
- generated from a different system than the one initiating the connection with
165
- the listener, it must be transferred securely to the initiating system.
166
-
167
- For example, assume the file `./winrmcerts/myserver.pem` was securely
168
- copied from another system on which the `cert generate` command originally
169
- produced the file. Now it can be used against a system with the appropriately
170
- configured listener as follows:
171
-
172
- knife winrm -f ./winrmcerts/myserver.pem -m myserver.myorg.com -t ssl ipconfig -x 'my_ad_domain\myuser' -P "$PASSWORDVAR"
173
-
174
- This will send the output of the Windows command `ipconfig` on the remote
175
- system. The argument to the `-f` option is the public key for the listener so
176
- that the listener's authenticity can be validated. The specified key
177
- can simply be a copy of the `.pem` file generated by the `cert generate` subcommand if
178
- that was used to create the certificates for the listener. The user
179
- `my_ad_domain\myuser` in the example is a user in the Windows Active Directory
180
- domain `my_ad_domain`.
181
-
182
- Alternatively, the [`knife ssl fetch`](https://docs.chef.io/knife_ssl_fetch.html) command can be used to retrieve the
183
- public key for the listener by simply reading it from the listener, though this command *must* be executed under
184
- conditions where the connection to the server is considered secure:
185
-
186
- knife ssl fetch https://myserver.myorg.org:5986/wsman
187
- knife winrm -f ./.chef/trusted_certs/wildcard_myorg_org.crt -m myserver.myorg.com -t ssl ipconfig -x 'my_ad_domain\myuser' -P "$PASSWORDVAR"
188
-
189
- In the `fetch` subcommand, the URL specified for testing WinRM connectivity to
190
- a given server SERVER on port PORT takes the form `https://SERVER:PORT/wsman`,
191
- hence the url specified above to retrieve the key for `myserver.myorg.org`.
192
- The command also outputs the location to which the key was retrieved, which
193
- can then be used as input to a subsequent `knife winrm` command.
194
-
195
- For that `knife winrm` command in the example, the argument to the `-f` option is again the public key -- this time its value
196
- of `./.chef/trusted_certs/wildcard_myorg_org.crt` is the file system location to which
197
- `knife ssl fetch` retrieved the public key.
198
-
199
- #### Testing WinRM SSL configuration
200
-
201
- The techniques below are useful for validating a WinRM listener's configuration -- all
202
- examples below assume there is a WinRM SSL listener configured on a remote Windows
203
- system `winserver.myoffice.com` on the default WinRM port of 5986 and this is
204
- the server being tested.
205
-
206
- ##### PowerShell's `test-wsman` cmdlet
207
- If you have access to a workstation running
208
- the Windows 8 or Windows Server 2012 or later versions of the Windows
209
- operating systems, you can use the `test-wsman` command to validate the
210
- configuration of a listener on a remote system `winserver.myoffice.com`:
211
-
212
- 1. On the Windows workstation client (not the system with the listener),
213
- install the .pfx public key certificate for the listener using
214
- certmgr.msc. This should be installed in the personal store under *"Trusted
215
- Root Certification Authorities"*.
216
- 2. Start PowerShell, and use it to run this command:
217
- `test-wsman -ComputerName winserver.myoffice.com -UseSSL`
218
-
219
- If the command executes without error, the ssl configuration is correct.
220
-
221
- ##### End to end SSL testing with `knife winrm`
222
-
223
- To validate that SSL is enabled for the listener without validating the
224
- server's certificate, the `--winrm-ssl-verify-mode` option of the `winrm`
225
- subcommand can be used:
226
-
227
- knife winrm -m winserver.myoffice.com -t ssl --winrm-ssl-verify-mode verify_none ipconfig -x 'my_ad_domain\myuser' -P "$PASSWORDVAR"
228
-
229
- If this succeeds, then any failures to execute the command when correctly
230
- validating the server, i.e. when specifying the `-f` parameter, are due to
231
- certificate configuration issues, not other connectivity or authentication
232
- problems.
233
-
234
- ##### The winrs tool
235
-
236
- The `winrs` tool is built into Windows, so if a Windows system is available,
237
- `winrs` may be used to troubleshoot. It takes parameters analogous to those of
238
- `knife winrm` and differences in success and failure between the two tools may
239
- indicate areas to investigate.
240
-
241
- Visit Microsoft's documentation for [`winrs`](https://technet.microsoft.com/en-us/library/hh875630.aspx) to learn more about the tool.
242
-
243
- ### Troubleshooting WinRM authentication issues
244
-
245
- Authentication issues can be debugged by loosening the authentication
246
- requirements on the server and explicitly using
247
- `--winrm-authentication-protocol` option for `knife winrm` to attempt to
248
- connect. As an example, the following PowerShell commands on the server will allow basic authentication
249
- and unencrypted communication:
250
-
251
- si wsman:\localhost\service\allowunencrypted $true
252
- # Don't set the following if attempting domain authentication
253
- si wsman:\localhost\service\auth\basic $true
254
-
255
- From the client, `knife winrm` can be instructed to explicitly allow basic
256
- authentication when validating authentication using a non-domain (i.e. local)
257
- account:
258
-
259
- # For testing a local account
260
- knife winrm -m winserver.myoffice.com --winrm-authentication-protocol basic ipconfig -x 'localuser' -P "$PASSWORDVAR" -VV
261
-
262
- # For testing a domain account
263
- knife winrm -m winserver.myoffice.com --winrm-authentication-protocol negotiate ipconfig -x 'localuser' -P "$PASSWORDVAR" -VV
264
-
265
- If the listener is an SSL listener, the additional arguments `-t ssl
266
- --winrm-ssl-verify-mode verify_none` should be supplied to enable SSL
267
- communication and disable peer verification for testing. The specification of
268
- `-VV` enables additional detailed debug output that can provide clues to the
269
- root cause of any failures.
270
-
271
- If the command fails, there is either a connectivity issue or a problem with
272
- an incorrect or expired password or disabled account.
273
-
274
- If the command succeeds, try the following
275
-
276
- si wsman:\localhost\service\allowunencrypted $false
277
-
278
- Then retry the earlier `knife winrm` command. If it fails, this may indicate
279
- an issue with your operating system's ability to encrypt traffic, particularly
280
- when using the `plaintext` transport, i.e. when not using the `SSL` transport.
281
- In that case, the Windows platform supports encryption of plaintext traffic
282
- through native Windows authentication protocols, but such support is often incomplete on other platforms.
283
-
284
- If the command succeeds, then there may be a more subtle issue with negotiate
285
- authentication. It may be necessary to explicitly specify a domain in the user
286
- name parameter (e.g. `mydomain\myuser` rather than just `user`) for instance,
287
- or a specified domain may actually be incorrect and something that should be omitted.
288
-
289
- ### Platform WinRM authentication support
290
-
291
- `knife-windows` supports `Kerberos`, `Negotiate`, and `Basic` authentication
292
- for WinRM communication. However, some of these protocols
293
- may not work with `knife-windows` on non-Windows systems because
294
- `knife-windows` relies on operating system libraries such as GSSAPI to implement
295
- Windows authentication, and some versions of these libraries do not
296
- fully implement the protocols.
297
-
298
- The following table shows the authentication protocols that can be used with
299
- `knife-windows` depending on whether the knife workstation is a Windows
300
- system, the transport, and whether or not the target user is a domain user or
301
- local to the target Windows system.
302
-
303
- | Workstation OS / Account Scope | SSL | Plaintext |
304
- |--------------------------------|------------------------------|----------------------------|
305
- | Windows / Local | Kerberos, Negotiate* , Basic | Kerberos, Negotiate, Basic |
306
- | Windows / Domain | Kerberos, Negotiate | Kerberos, Negotiate |
307
- | Non-Windows / Local | Kerberos, [Negotiate*](https://github.com/chef/knife-windows/issues/176) Basic | Kerberos, Basic |
308
- | Non-Windows / Domain | Kerberos, Negotiate | Kerberos |
309
-
310
- > \* There is a known defect in the `knife winrm` and `knife bootstrap windows
311
- > winrm` subcommands invoked on any OS platform when authenticating with the Negotiate protocol over
312
- > the SSL transport. The defect is tracked by
313
- > [knife-windows issue #176](https://github.com/chef/knife-windows/issues/176): If the remote system is
314
- > domain-joined, local accounts may not be used to authenticate via Negotiate
315
- > over SSL -- only domain accounts will work. Local accounts will only
316
- > successfully authenticate if the system is not joined to a domain.
317
- >
318
- > This is generally not an issue for bootstrap scenarios, where the
319
- > system has yet to be joined to any domain, but can be a problem for remote
320
- > management cases after the system is domain joined. Workarounds include using
321
- > a domain account instead, or enabling Basic authentication on the remote
322
- > system (unencrypted communication **does not** need to be enabled to make
323
- > Basic authentication function over SSL).
1
+ <!---
2
+ This file is reset every time a new release is done. This file describes changes that have not yet been released.
3
+
4
+ Example Doc Change:
5
+ ### Headline for the required change
6
+ Description of the required change.
7
+ -->
8
+ # knife-windows 1.0.0 doc changes
9
+
10
+ ### WinRM default port default change
11
+ The `winrm_port` option specifies the TCP port on the remote system to which
12
+ to connect for WinRM communication for `knife-windows` commands that use
13
+ WinRM. The default value of this option is **5986** if the WinRM transport
14
+ (configured by the `winrm_transport` option) is SSL, otherwise it is **5985**.
15
+ These defaults correspond to the port assignment conventions for the WinRM
16
+ protocol, which is also honored by WinRM tools built-in to Windows such as the
17
+ `winrs` tool.
18
+
19
+ In previous releases, the default port was always 5985, regardless of the
20
+ transport being used. To override the default, specify the `winrm_port`
21
+ (`-p`) option and specify the desired port as the option's value.
22
+
23
+ ### WinRM authentication protocol defaults to `negotiate` regardless of name formats
24
+ Unless explicitly overridden using the new `winrm_authentication_protocol`
25
+ option, `knife-windows` subcommands that use WinRM will authenticate using the
26
+ negotiate protocol, just as the tools built-in to the Windows operating
27
+ system would do.
28
+
29
+ Previously, `knife-windows` would use basic authentication, unless the
30
+ username specified to the `winrm_user` option had the format `domain\user`,
31
+ and in that case `knife-windows` would use negotiate authentication.
32
+
33
+ To override the new behavior, specify the `winrm_authentication_protocol`
34
+ option with a value of either the `basic` or `kerberos` to choose a different
35
+ authentication protocol.
36
+
37
+ ### New `:winrm_authentication_protocol` option
38
+
39
+ This option allows the authentication protocol used for WinRM communication to
40
+ be explicitly specified. The supported protocol values are `kerberos`, `negotiate`,
41
+ and `basic`, each of which directs `knife-windows` to use the respective authentication protocols.
42
+
43
+ If the option is not specified, `knife-windows` treats this as a default value
44
+ of `negotiate` and the tool uses negotiate authentication for WinRM.
45
+
46
+ ### New `:winrm_ssl_verify_mode` option
47
+ When running the `winrm` and `bootstrap windows` subcommands with the
48
+ `winrm_transport` option set to `ssl` to communicate with a remote Windows system using
49
+ the WinRM protocol via the SSL transport, you may disable `knife`'s verification of
50
+ the remote system's SSL certificate. This is useful for testing or
51
+ troubleshooting SSL connectivity before you've verified the certificate of the remote system's SSL WinRM listener.
52
+
53
+ The option that controls whether the server is validated is the
54
+ `knife[:winrm_verify_ssl_mode]` option, which has the same values as Chef's
55
+ [`:ssl_verify_mode`](https://docs.getchef.com/config_rb_client.html#settings) option. By default, the option is set to `:verify_peer`,
56
+ which means that SSL communication must be verified using a certificate file
57
+ specified by the `:ca_trust_file` option. To avoid the need to have this file available
58
+ during testing, you can specify the `knife[:winrm_ssl_verify_mode]` option in
59
+ `knife.rb` OR specify it directly on the `knife` command line as
60
+ `--winrm-ssl-verify-mode` and set its value to `:verify_none`, which will
61
+ override the default behavior and skip the verification of the remote system
62
+ -- there is no need to specify the `:ca_trust_file` option in this case.
63
+
64
+ Here's an example that disables peer verification:
65
+
66
+ knife winrm -m 192.168.0.6 -x 'mydomain\myuser' -P "$PASSWORDVAR" -t ssl --winrm-ssl-verify-mode verify_none ipconfig
67
+
68
+ This option should be used carefully since disabling the verification of the
69
+ remote system's certificate can subject knife commands to spoofing attacks.
70
+
71
+ ### New subcommands to automate WinRM SSL listener configuration
72
+ The WinRM protocol may be encapsulated by SSL, but the configuration of such
73
+ connections can be difficult, particularly when the WinRM client is a
74
+ non-Windows system. Three new knife subcommands have been implemented in
75
+ knife-windows 1.0.0.rc.0 to simplify and automate this configuration:
76
+
77
+ * `knife windows cert generate` subcommand:
78
+ Generates certificates in formats useful for creating WinRM SSL listeners.
79
+ It also generates a related public key file in .pem format to validating
80
+ communication involving listeners configured with the generated certificate.
81
+ * `knife windows cert install` subcommand:
82
+ Installs a certificate such as one generated by the `cert generate`
83
+ subcommand into the Windows certificate store so that it can be used as the
84
+ SSL certificate for a WinRM listener. This command will only function on the
85
+ Windows operating system. Certificates are always installed in the
86
+ computer's personal store, i.e. the store that can be viewed via the
87
+ PowerShell command `ls Cert:\LocalMachine\My`.
88
+ * `knife windows listener create` subcommand:
89
+ Creates a WinRM listener on a Windows system. This command functions only on
90
+ the Windows operating system.
91
+
92
+ #### Example WinRM listener configuration workflows
93
+
94
+ The subcommands are used in the following scenarios
95
+
96
+ ##### Creation of a new listener with a new SSL certificate
97
+
98
+ This workflow assumes that WinRM is enabled on the system, which can be
99
+ accomplished with the command
100
+
101
+ winrm quickconfig
102
+
103
+ If you're creating a listener and don't already have an SSL certificate with
104
+ which to configure it, you can quickly create an enabled listener with a short
105
+ sequence of commands. The example below assumes that the `knife-windows`
106
+ plugin is being executed on a Windows system via the PowerShell command shell,
107
+ and that the system is registered with the relevant DNS with the name
108
+ `mysystem.myorg.org` and that this is the name with which the user would like
109
+ to remotely access this system.
110
+
111
+ This sequence of commands creates a listener -- it assumes the existence of the directory `winrmcerts`
112
+ under the user's profile directory:
113
+
114
+ knife windows cert generate --domain myorg.org --output-file $env:userprofile/winrmcerts/winrm-ssl
115
+ knife windows listener create --hostname *.myorg.org --cert-install $env:userprofile/winrmcerts/winrm-ssl.pfx
116
+
117
+ The first command, `cert generate`, may be executed on any computer (even one not running the
118
+ Windows operating system) and produces three files. The first two are certificates containing
119
+ private keys that should be stored securely. The 3rd is a `.pem` file
120
+ containing the public key required to validate the server. This file may be
121
+ shared. The command also outputs the thumbprint of the generated certificate,
122
+ which is useful for finding the certificate in a certificate store or using
123
+ with other commands that require the thumbprint.
124
+
125
+ The next command, `listener create`, creates the SSL listener -- if it is executed on a different
126
+ system than that which generated the certificates, the required certificate
127
+ file **must** be transferred securely to the system on which the listener will
128
+ be created. It requires a PKCS12 `.pfx` file for the `--cert-install` argument
129
+ which is one of the files generated by the previous `cert generate` command.
130
+
131
+ After these commands are executed, an SSL listener will be created listening
132
+ on TCP port 5986, the default WinRM SSL port. Using PowerShell, the following
133
+ command will show this and other listeners on the system:
134
+
135
+ ls wsman:\localhost\listener
136
+
137
+ As an alternative to the command sequence above, the `cert install` command could be used to install the
138
+ certificate in a separate step, i which case the `--cert-install` option must
139
+ be replaced with the `--cert-thumbprint` option to use the generated
140
+ certificate's thumbprint to identify the certificate with which the listener
141
+ should be configured:
142
+
143
+ knife windows cert generate --domain myorg.org --output-file $env:userprofile/winrmcerts/winrm-ssl
144
+ knife windows cert install $env:userprofile/winrmcerts/winrm-ssl
145
+ knife windows listener create --hostname *.myorg.org --cert-thumbprint 1F3A70E2601FA1576BC4850ED2D7EF6587076423
146
+
147
+ The system would then be in the same state as that after the original shorter
148
+ command sequence.
149
+
150
+ Note that the `cert install` command could be skipped if the certificate
151
+ already exists in the personal certificate store of the computer. To view that store and
152
+ see the thumbprints of certificates that could be used with the `listener
153
+ create` command to create an SSL listener, the following PowerShell command
154
+ may be executed:
155
+
156
+ ls Cert:\LocalMachine\My
157
+
158
+ ##### Connecting to a configured SSL listeners
159
+
160
+ In order to connect securely to the configured SSL listener via the `knife
161
+ winrm` or `knife bootstrap windows winrm` subcommands, the workstation running
162
+ `knife` must have a `.pem` file that contains the listener's public key, such
163
+ as the one generated by `knife windows cert generate`. If the file was
164
+ generated from a different system than the one initiating the connection with
165
+ the listener, it must be transferred securely to the initiating system.
166
+
167
+ For example, assume the file `./winrmcerts/myserver.pem` was securely
168
+ copied from another system on which the `cert generate` command originally
169
+ produced the file. Now it can be used against a system with the appropriately
170
+ configured listener as follows:
171
+
172
+ knife winrm -f ./winrmcerts/myserver.pem -m myserver.myorg.com -t ssl ipconfig -x 'my_ad_domain\myuser' -P "$PASSWORDVAR"
173
+
174
+ This will send the output of the Windows command `ipconfig` on the remote
175
+ system. The argument to the `-f` option is the public key for the listener so
176
+ that the listener's authenticity can be validated. The specified key
177
+ can simply be a copy of the `.pem` file generated by the `cert generate` subcommand if
178
+ that was used to create the certificates for the listener. The user
179
+ `my_ad_domain\myuser` in the example is a user in the Windows Active Directory
180
+ domain `my_ad_domain`.
181
+
182
+ Alternatively, the [`knife ssl fetch`](https://docs.chef.io/knife_ssl_fetch.html) command can be used to retrieve the
183
+ public key for the listener by simply reading it from the listener, though this command *must* be executed under
184
+ conditions where the connection to the server is considered secure:
185
+
186
+ knife ssl fetch https://myserver.myorg.org:5986/wsman
187
+ knife winrm -f ./.chef/trusted_certs/wildcard_myorg_org.crt -m myserver.myorg.com -t ssl ipconfig -x 'my_ad_domain\myuser' -P "$PASSWORDVAR"
188
+
189
+ In the `fetch` subcommand, the URL specified for testing WinRM connectivity to
190
+ a given server SERVER on port PORT takes the form `https://SERVER:PORT/wsman`,
191
+ hence the url specified above to retrieve the key for `myserver.myorg.org`.
192
+ The command also outputs the location to which the key was retrieved, which
193
+ can then be used as input to a subsequent `knife winrm` command.
194
+
195
+ For that `knife winrm` command in the example, the argument to the `-f` option is again the public key -- this time its value
196
+ of `./.chef/trusted_certs/wildcard_myorg_org.crt` is the file system location to which
197
+ `knife ssl fetch` retrieved the public key.
198
+
199
+ #### Testing WinRM SSL configuration
200
+
201
+ The techniques below are useful for validating a WinRM listener's configuration -- all
202
+ examples below assume there is a WinRM SSL listener configured on a remote Windows
203
+ system `winserver.myoffice.com` on the default WinRM port of 5986 and this is
204
+ the server being tested.
205
+
206
+ ##### PowerShell's `test-wsman` cmdlet
207
+ If you have access to a workstation running
208
+ the Windows 8 or Windows Server 2012 or later versions of the Windows
209
+ operating systems, you can use the `test-wsman` command to validate the
210
+ configuration of a listener on a remote system `winserver.myoffice.com`:
211
+
212
+ 1. On the Windows workstation client (not the system with the listener),
213
+ install the .pfx public key certificate for the listener using
214
+ certmgr.msc. This should be installed in the personal store under *"Trusted
215
+ Root Certification Authorities"*.
216
+ 2. Start PowerShell, and use it to run this command:
217
+ `test-wsman -ComputerName winserver.myoffice.com -UseSSL`
218
+
219
+ If the command executes without error, the ssl configuration is correct.
220
+
221
+ ##### End to end SSL testing with `knife winrm`
222
+
223
+ To validate that SSL is enabled for the listener without validating the
224
+ server's certificate, the `--winrm-ssl-verify-mode` option of the `winrm`
225
+ subcommand can be used:
226
+
227
+ knife winrm -m winserver.myoffice.com -t ssl --winrm-ssl-verify-mode verify_none ipconfig -x 'my_ad_domain\myuser' -P "$PASSWORDVAR"
228
+
229
+ If this succeeds, then any failures to execute the command when correctly
230
+ validating the server, i.e. when specifying the `-f` parameter, are due to
231
+ certificate configuration issues, not other connectivity or authentication
232
+ problems.
233
+
234
+ ##### The winrs tool
235
+
236
+ The `winrs` tool is built into Windows, so if a Windows system is available,
237
+ `winrs` may be used to troubleshoot. It takes parameters analogous to those of
238
+ `knife winrm` and differences in success and failure between the two tools may
239
+ indicate areas to investigate.
240
+
241
+ Visit Microsoft's documentation for [`winrs`](https://technet.microsoft.com/en-us/library/hh875630.aspx) to learn more about the tool.
242
+
243
+ ### Troubleshooting WinRM authentication issues
244
+
245
+ Authentication issues can be debugged by loosening the authentication
246
+ requirements on the server and explicitly using
247
+ `--winrm-authentication-protocol` option for `knife winrm` to attempt to
248
+ connect. As an example, the following PowerShell commands on the server will allow basic authentication
249
+ and unencrypted communication:
250
+
251
+ si wsman:\localhost\service\allowunencrypted $true
252
+ # Don't set the following if attempting domain authentication
253
+ si wsman:\localhost\service\auth\basic $true
254
+
255
+ From the client, `knife winrm` can be instructed to explicitly allow basic
256
+ authentication when validating authentication using a non-domain (i.e. local)
257
+ account:
258
+
259
+ # For testing a local account
260
+ knife winrm -m winserver.myoffice.com --winrm-authentication-protocol basic ipconfig -x 'localuser' -P "$PASSWORDVAR" -VV
261
+
262
+ # For testing a domain account
263
+ knife winrm -m winserver.myoffice.com --winrm-authentication-protocol negotiate ipconfig -x 'localuser' -P "$PASSWORDVAR" -VV
264
+
265
+ If the listener is an SSL listener, the additional arguments `-t ssl
266
+ --winrm-ssl-verify-mode verify_none` should be supplied to enable SSL
267
+ communication and disable peer verification for testing. The specification of
268
+ `-VV` enables additional detailed debug output that can provide clues to the
269
+ root cause of any failures.
270
+
271
+ If the command fails, there is either a connectivity issue or a problem with
272
+ an incorrect or expired password or disabled account.
273
+
274
+ If the command succeeds, try the following
275
+
276
+ si wsman:\localhost\service\allowunencrypted $false
277
+
278
+ Then retry the earlier `knife winrm` command. If it fails, this may indicate
279
+ an issue with your operating system's ability to encrypt traffic, particularly
280
+ when using the `plaintext` transport, i.e. when not using the `SSL` transport.
281
+ In that case, the Windows platform supports encryption of plaintext traffic
282
+ through native Windows authentication protocols, but such support is often incomplete on other platforms.
283
+
284
+ If the command succeeds, then there may be a more subtle issue with negotiate
285
+ authentication. It may be necessary to explicitly specify a domain in the user
286
+ name parameter (e.g. `mydomain\myuser` rather than just `user`) for instance,
287
+ or a specified domain may actually be incorrect and something that should be omitted.
288
+
289
+ ### Platform WinRM authentication support
290
+
291
+ `knife-windows` supports `Kerberos`, `Negotiate`, and `Basic` authentication
292
+ for WinRM communication. However, some of these protocols
293
+ may not work with `knife-windows` on non-Windows systems because
294
+ `knife-windows` relies on operating system libraries such as GSSAPI to implement
295
+ Windows authentication, and some versions of these libraries do not
296
+ fully implement the protocols.
297
+
298
+ The following table shows the authentication protocols that can be used with
299
+ `knife-windows` depending on whether the knife workstation is a Windows
300
+ system, the transport, and whether or not the target user is a domain user or
301
+ local to the target Windows system.
302
+
303
+ | Workstation OS / Account Scope | SSL | Plaintext |
304
+ |--------------------------------|------------------------------|----------------------------|
305
+ | Windows / Local | Kerberos, Negotiate* , Basic | Kerberos, Negotiate, Basic |
306
+ | Windows / Domain | Kerberos, Negotiate | Kerberos, Negotiate |
307
+ | Non-Windows / Local | Kerberos, [Negotiate*](https://github.com/chef/knife-windows/issues/176) Basic | Kerberos, Basic |
308
+ | Non-Windows / Domain | Kerberos, Negotiate | Kerberos |
309
+
310
+ > \* There is a known defect in the `knife winrm` and `knife bootstrap windows
311
+ > winrm` subcommands invoked on any OS platform when authenticating with the Negotiate protocol over
312
+ > the SSL transport. The defect is tracked by
313
+ > [knife-windows issue #176](https://github.com/chef/knife-windows/issues/176): If the remote system is
314
+ > domain-joined, local accounts may not be used to authenticate via Negotiate
315
+ > over SSL -- only domain accounts will work. Local accounts will only
316
+ > successfully authenticate if the system is not joined to a domain.
317
+ >
318
+ > This is generally not an issue for bootstrap scenarios, where the
319
+ > system has yet to be joined to any domain, but can be a problem for remote
320
+ > management cases after the system is domain joined. Workarounds include using
321
+ > a domain account instead, or enabling Basic authentication on the remote
322
+ > system (unencrypted communication **does not** need to be enabled to make
323
+ > Basic authentication function over SSL).