Lệnh gcloud compute reset-windows-password
cho phép người dùng có quyền ghi vào dự án Compute Engine truy xuất mật khẩu một cách an toàn cho các tài khoản trên các phiên bản Windows.
Lệnh này thực hiện việc này bằng cách gửi tên người dùng và khoá công khai RSA đến thực thể. Sau đó, tác nhân chạy trên thực thể sẽ thực hiện một trong những thao tác sau:
- Tạo một tài khoản trên thực thể cho tên người dùng đó và tạo một mật khẩu ngẫu nhiên.
- Đặt lại mật khẩu thành một giá trị ngẫu nhiên nếu tài khoản đã tồn tại.
Tác nhân chạy trên thực thể sẽ mã hoá mật khẩu bằng khoá công khai được cung cấp và gửi lại cho ứng dụng để giải mã bằng khoá riêng tư tương ứng.
Phần này mô tả cách hoạt động của quy trình này và cung cấp cho bạn một số tập lệnh mẫu giúp tái tạo các bước này theo phương thức lập trình. Nếu bạn muốn làm theo các bước này theo cách thủ công, hãy đọc phần Hướng dẫn thủ công.
Trước khi bạn bắt đầu
- Tạo phiên bản Windows.
-
Thiết lập tính năng xác thực nếu bạn chưa thiết lập.
Xác thực là quy trình xác minh danh tính của bạn để truy cập vào các dịch vụ và API. Trusted Cloud by S3NS
Để chạy mã hoặc mẫu từ môi trường phát triển cục bộ, bạn có thể xác thực với Compute Engine bằng cách chọn một trong các tuỳ chọn sau:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Trusted Cloud console to access Trusted Cloud by S3NS services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, sign in to the gcloud CLI with your federated identity and then initialize it by running the following command:
gcloud init
- Set a default region and zone.
Tạo cặp khoá RSA 2048 bit. Trong OpenSSL, hãy tạo cặp khoá này bằng cách chạy:
$ openssl genrsa -out private_key 2048
Thao tác này sẽ tạo một tệp khoá riêng tư có tên private_key với nội dung trông như sau:
$ cat private_key -----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAwgsquN4IBNPqIUnu+h/5Za1kujb2YRhX1vCQVQAkBwnWigcC qOBVfRa5JoZfx6KIvEXjWqa77jPvlsxM4WPqnDIM2qiK36up3SKkYwFjff6F2ni/ ry8vrwXCX3sGZ1hbIHlK0O012HpA3ISeEswVZmX2X67naOvJXfY5v0hGPWqCADao +xVxrmxsZD4IWnKl1UaZzI5lhAzr8fw6utHwx1EZ/MSgsEki6tujcZfN+GUDRnmJ GQSnPTXmsf7Q4DKreTZk49cuyB3prV91S0x3DYjCUpSXrkVy1Ha5XicGD/q+ystu FsJnrrhbNXJbpSjM6sjo/aduAkZJl4FmOt0R7QIDAQABAoIBAQCsT6hHc/tg9iIC H5pUiRI55Uj+R5JwVGKkXwl8Qdy8V1MpTOJivpuLsiMGf+sL51xO/CzRsiBOfdYz bgaTW9vZimR5w5NW3iTAV2Ps+y2zk9KfV/y3/0nzvUSG70OXgBGj+7GhaBQZwS5Z 5HZOsOYMAV1QSIv8Uu2FQAK1xuOA4seJ/NK42iXgVB1XvYe2AxCWNqCBJylk9F5N 8a213oJWw2mwQWCSfZhuvwYRO7w/V+mInKPkKlWvf3SLuMCWeDI8s0jLsJMQ0rbp jYXRzc2G+LF1aLxjatiGeLsqfVYerNohufGAajpNkSvcMciDXvD9aJhZqior+x2Q rCnMuNRNAoGBAPI6r32wIf8H9GmcvGrXk9OYLq0uJGqAtJDgGmJM5BSX4mlSz+Ni SYlQOfi24ykQDo3XbA59Lb6H0L64czi2a3OmpG8s6h4ymp+3cSd1k1AER1oZudwH 9UScGfSgT/nMgufBwEGlQkCMp5x4Sl20clCHZ49p9eNiXML3wxpCZPIjAoGBAM0T NKt/rjqMs0qOWAJKemSPk0zV+1RSjCoOdKC6jmHRGr/MIoKiJLIkywV2m53yv8Wu BF3gVUDlwojoOKcVR8588tek5L0j9RshGovKj4Uxz9uPPhzeNnlSA+5PS284VtKz LX8xZ/b+MNCyor9jT0qoWylqym0w+M4aFL2tUQSvAoGABJvnQO38B51AIk5QK3xE nM8VfEgXe0tNpEAPYHV0FYw6S6S+veXd3lX/dGMOeXaLwFkr/i6Vkz2EVEywLJEU BFRUZqUlI0P1OzrDVWvgTLJ4JRe+OJiSKycJO2VdgDRK/Vvra5RYaWADxG9pgtTv I+cfqlPq0NPLTg5m0PYYc58CgYBpGt/SygTNA1Hc82mN+wgRxDhVmBJRHGG0KGaD /jl9TsOr638AfwPZvdvD+A83+7NoKJEaYCCxu1BiBMsMb263GPkJpvyJKAW2mtfV L8MxG9+Rgy/tccJvmaZkHIXoAfMV2DmISBUl1Q/F1thsyQRZmkHmz1Hidsf+MgXR VSQCBwKBgQCxwJtGZGPdQbDXcZZtL0yJJIbdt5Q/TrW0es17IPAoze+E6zFg9mo7 ea9AuGxOGDQwO9n5DBn/3XcSjRnhvXaW60Taz6ZC60Zh/s6IilCmav+n9ewFHJ3o AglSJZRJ1Eer0m5m6s2FW5U0Yjthxwkm3WCWS61cOOTvb6xhQ5+WSw== -----END RSA PRIVATE KEY-----
Tạo khoá công khai. Để tạo khoá công khai, hãy chạy:
$ openssl rsa -pubout -in private_key -out public_key
Thao tác này sẽ tạo một tệp public_key có dạng như sau:
$ cat public_key -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwgsquN4IBNPqIUnu+h/5 Za1kujb2YRhX1vCQVQAkBwnWigcCqOBVfRa5JoZfx6KIvEXjWqa77jPvlsxM4WPq nDIM2qiK36up3SKkYwFjff6F2ni/ry8vrwXCX3sGZ1hbIHlK0O012HpA3ISeEswV ZmX2X67naOvJXfY5v0hGPWqCADao+xVxrmxsZD4IWnKl1UaZzI5lhAzr8fw6utHw x1EZ/MSgsEki6tujcZfN+GUDRnmJGQSnPTXmsf7Q4DKreTZk49cuyB3prV91S0x3 DYjCUpSXrkVy1Ha5XicGD/q+ystuFsJnrrhbNXJbpSjM6sjo/aduAkZJl4FmOt0R 7QIDAQAB -----END PUBLIC KEY-----
Trích xuất số dư và số mũ. Mô-đun và luỹ thừa tạo nên khoá công khai và khoá riêng tư. Từ khoá công khai, hãy trích xuất số dư và số mũ:
$ openssl rsa -in public_key -pubin -text -noout Public-Key: (2048 bit) Modulus: 00:c2:0b:2a:b8:de:08:04:d3:ea:21:49:ee:fa:1f: f9:65:ad:64:ba:36:f6:61:18:57:d6:f0:90:55:00: 24:07:09:d6:8a:07:02:a8:e0:55:7d:16:b9:26:86: 5f:c7:a2:88:bc:45:e3:5a:a6:bb:ee:33:ef:96:cc: 4c:e1:63:ea:9c:32:0c:da:a8:8a:df:ab:a9:dd:22: a4:63:01:63:7d:fe:85:da:78:bf:af:2f:2f:af:05: c2:5f:7b:06:67:58:5b:20:79:4a:d0:ed:35:d8:7a: 40:dc:84:9e:12:cc:15:66:65:f6:5f:ae:e7:68:eb: c9:5d:f6:39:bf:48:46:3d:6a:82:00:36:a8:fb:15: 71:ae:6c:6c:64:3e:08:5a:72:a5:d5:46:99:cc:8e: 65:84:0c:eb:f1:fc:3a:ba:d1:f0:c7:51:19:fc:c4: a0:b0:49:22:ea:db:a3:71:97:cd:f8:65:03:46:79: 89:19:04:a7:3d:35:e6:b1:fe:d0:e0:32:ab:79:36: 64:e3:d7:2e:c8:1d:e9:ad:5f:75:4b:4c:77:0d:88: c2:52:94:97:ae:45:72:d4:76:b9:5e:27:06:0f:fa: be:ca:cb:6e:16:c2:67:ae:b8:5b:35:72:5b:a5:28: cc:ea:c8:e8:fd:a7:6e:02:46:49:97:81:66:3a:dd: 11:ed Exponent: 65537 (0x10001)
Mã hoá số dư và số mũ. Bạn phải trích xuất và mã hoá theo chuẩn base64 cho số dư và số mũ. Trước khi mã hoá số dư, hãy xoá 0 byte ở đầu số dư. Theo mặc định, tệp public_key đã là một chuỗi byte được mã hoá base64 chứa các thông tin sau:
- 32 byte thông tin tiêu đề
- 1 byte có số 0 ở đầu của số dư
- 256 byte số nguyên tố
- 2 byte tiêu đề số mũ
- 3 byte số mũ
Bạn cần trích xuất và mã hoá riêng số dư và số mũ với phần nội dung còn lại của tệp. Trích xuất và mã hoá số dư và số mũ bằng các lệnh sau:
$ cat public_key | grep -v -- ----- | base64 -d | dd bs=1 skip=33 count=256 2>/dev/null | base64 -w 0; echo wgsquN4IBNPqIUnu+h/5Za1kujb2YRhX1vCQVQAkBwnWigcCqOBVfRa5JoZfx6KIvEXjWqa77jPvlsx M4WPqnDIM2qiK36up3SKkYwFjff6F2ni/ry8vrwXCX3sGZ1hbIHlK0O012HpA3ISeEswVZmX2X67naO vJXfY5v0hGPWqCADao+xVxrmxsZD4IWnKl1UaZzI5lhAzr8fw6utHwx1EZ/MSgsEki6tujcZfN+GUDR nmJGQSnPTXmsf7Q4DKreTZk49cuyB3prV91S0x3DYjCUpSXrkVy1Ha5XicGD/q+ystuFsJnrrhbNXJb pSjM6sjo/aduAkZJl4FmOt0R7Q==
$ cat public_key | grep -v -- ----- | base64 -d | dd bs=1 skip=291 count=3 2>/dev/null | base64 AQAB
Nếu bạn gặp sự cố khi mã hoá số dư, hãy đảm bảo bạn đã xoá byte số 0 ở đầu số dư trước khi cố gắng mã hoá số dư đó.
Tạo một đối tượng JSON có tên người dùng và thông tin khoá công khai. Tạo một đối tượng JSON có dữ liệu sau:
userName
: Tên người dùng để đăng nhập vào thực thể.modulus
: Mô-đun được mã hoá base64 của khoá công khai.exponent
: Hệ số được mã hoá base64 của khoá công khaiemail
: Địa chỉ email của người dùng yêu cầu mật khẩu. Đây phải là địa chỉ email của Tài khoản Google được xác thực với API.expireOn
: Dấu thời gian được mã hoá theo RFC 3399 về thời điểm khoá hết hạn. Thời gian này phải theo giờ UTC, đặt trước khoảng 5 phút. Vì các khoá này chỉ được dùng để tạo tên người dùng và mật khẩu, nên bạn không cần đến các khoá này sau khi tạo mật khẩu. Nếu khoá không có ngày hết hạn hoặc ngày hết hạn đã qua, thì tác nhân sẽ không sử dụng khoá đó và sẽ bỏ qua hoàn toàn khoá đó.
Ví dụ:
{\"userName\": \"example-user\", \"modulus\": \"wgsquN4IBNPqIUnu+h/5Za1kujb2YRhX1 vCQVQAkBwnWigcCqOBVfRa5JoZfx6KIvEXjWqa77jPvlsxM4WPqnDIM2qiK36up3SKkYwFjff6F 2ni/ry8vrwXCX3sGZ1hbIHlK0O012HpA3ISeEswVZmX2X67naOvJXfY5v0hGPWqCADao+xVxrmx sZD4IWnKl1UaZzI5lhAzr8fw6utHwx1EZ/MSgsEki6tujcZfN+GUDRnmJGQSnPTXmsf7Q4DKreT Zk49cuyB3prV91S0x3DYjCUpSXrkVy1Ha5XicGD/q+ystuFsJnrrhbNXJbpSjM6sjo/aduAkZJl 4FmOt0R7Q==\", \"exponent\": \"AQAB\", \"email\": \"example.user@example.com\", \"expireOn\": \"2015-04-14T01:37:19Z\"}
Xin lưu ý rằng không được có dòng mới trong chuỗi JSON.
Thêm đối tượng JSON vào siêu dữ liệu thực thể. Đặt siêu dữ liệu thực thể bằng cách sử dụng khoá siêu dữ liệu
windows-keys
và đối tượng JSON làm giá trị khoá.Để cập nhật siêu dữ liệu thực thể trong API, bạn phải cung cấp vân tay số cùng với yêu cầu của mình. Lấy vân tay số hiện tại của thực thể bằng cách tạo yêu cầu GET tới thực thể:
GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/test-windows-auth [..snip..] "metadata": { "kind": "compute#metadata", "fingerprint": "5sFotm8Ee0I=", "items": [ { … } [..snip]..
Tiếp theo, hãy tạo một yêu cầu
POST
cho phương thứcsetMetadata
, cung cấp vân tay số và đối tượng JSON mà bạn đã tạo:POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/test-windows-auth/setMetadata { "fingerprint": "5sFotm8Ee0I=", "items": [ { "value": "{\"userName\": \"example-user\", \"modulus\": \"wgsquN4IBNPqIUnu+h/5Za1kujb2YRhX1vCQVQAkBwnWigcCqOBVfRa5JoZfx6KIvEXjWqa77jPvlsxM4WPqnDIM2qiK36up3SKkYwFjff6F2ni/ry8vrwXCX3sGZ1hbIHlK0O012HpA3ISeEswVZmX2X67naOvJXfY5v0hGPWqCADao+xVxrmxsZD4IWnKl1UaZzI5lhAzr8fw6utHwx1EZ/MSgsEki6tujcZfN+GUDRnmJGQSnPTXmsf7Q4DKreTZk49cuyB3prV91S0x3DYjCUpSXrkVy1Ha5XicGD/q+ystuFsJnrrhbNXJbpSjM6sjo/aduAkZJl4FmOt0R7Q==\", \"exponent\": \"AQAB\", \"email\": \"user@example.com\", \"expireOn': '2015\"04-14T01:37:19Z\"}\n", "key": "windows-keys" } ] }
Tên của khoá phải là
windows-keys
và giá trị phải được đặt thành một hoặc nhiều chuỗi JSON như chuỗi ở trên. Bạn nên phân tách nhiều chuỗi bằng các dòng mới. Khi thêm nhiều mục nhập, hãy đảm bảo rằng giá trị siêu dữ liệu không vượt quá 32 KB.Đọc đầu ra từ cổng nối tiếp số bốn. Tác nhân trên thực thể sẽ tự động lấy giá trị của
windows-keys
và tạo một mật khẩu được mã hoá. Đọc mật khẩu đã mã hoá bằng cách truy vấn cổng nối tiếp số bốn. Trong API, hãy tạo một yêu cầuGET
đến phương thứcgetSerialPortOutput
, truyềnport=4
dưới dạng tham số truy vấn:GET https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/instances/test-windows-auth/serialPort?port=4 { "kind": "compute#serialPortOutput", "selfLink": "https://www.googleapis.com/compute/v1/projects/myproject/zones/_/instances/test-api-auth/serialPort", "contents": "{\"ready\":true,\"version\":\"Microsoft Windows NT 6.1.7601 Service Pack 1\"}\n{\"encryptedPassword\":\"uiHDEhxyvj6lF5GalH h9TsMZb4bG6Y9qGmFb9S3XI29yvVsDCLdp4IbUg21MncHcaxP0rFu0kyjxlEXDs8y4L1KOhy6iyB42Lh+vZ4XIMjmvU4rZrjsBZ5TxQo9hL0lBW7o3FRM\\/UIXCeRk39ObUl2A jDmQ0mcw1byJI5v9KVJnNMaHdRCy\\/kvN6bx3qqjIhIMu0JExp4UVkAX2Mxb9b+c4o2DiZF5pY6ZfbuEmjSbvGRJXyswkOJ4jTZl+7e6+SZfEal8HJyRfZKiqTjrz+DLjYSlXr fIRqlvKeAFGOJq6IRojNWiTOOh8Zorc0iHDTIkf+MY0scfbBUo5m30Bf4w==\",\"exponent\":\"AQAB\",\"modulus\":\"0tiKdO2JmBHss26jnrSAwb583KG\\/ZIw5Jw wMPXrCVsFAPwY1OV3RlT1Hp4Xvpibr7rvJbOC+f\\/Gd0cBrK5pccQfccB+OHKpbBof473zEfRbdtFwPn10RfAFj\\/xikW0r\\/XxgG\\/c8tz9bmALBStGqmwOVOLRHxjwgtG u4poeuwmFfG6TuwgCadxpllW74mviFd4LZVSuCSni5YJnBM2HSJ8NP6g1fqI17KDXt2XO\\/7kSItubmMk+HGEXdH4qiugHYewaIf1o4XSQROC8xlRl7t\\/RaD4U58hKYkVwg0 Ir7WzYzAVpG2UR4Co\\/GDG9Hct7HOYekDqVQ+sSZbwzajnVunkw==\",\"passwordFound\":true,\"userName\":\"example-user\"}\n" }
Đầu ra cổng nối tiếp có thể chứa nhiều phản hồi, được phân tách bằng dòng mới. Để tìm phản hồi chính xác, hãy so khớp mô-đun mà bạn đã truyền vào với đầu ra của cổng nối tiếp. Mỗi phản hồi là một chuỗi được mã hoá bằng JSON với các trường sau:
userName
: Tên người dùng được truyền đến thực thể.passwordFound
: Giá trị Boolean cho biết liệu quá trình tạo mật khẩu có thành công hay không.encryptedPassword
: Mật khẩu được mã hoá, mã hoá base64.modulus
: Mô-đun đã được truyền vào trước đó.exponent
: Hệ số mũ đã được truyền vào trước đó.
Để biết thông tin về việc giữ lại đầu ra cổng nối tiếp, hãy xem phần Xem đầu ra cổng nối tiếp.
Giải mã mật khẩu. Để lấy mật khẩu, hãy sử dụng khoá riêng đã tạo trước đó để giải mã mật khẩu đã mã hoá. Mật khẩu phải được giải mã bằng tính năng Thêm dữ liệu vào cuối thông điệp để mã hoá bất đối xứng tối ưu (OAEP). Đối với OpenSSL, lệnh để giải mã dữ liệu đầu vào là:
$ openssl rsautl -decrypt -inkey private_key -oaep
Để giải mã mật khẩu ở trên, hãy cung cấp giá trị
encryptedPassword
. Hãy nhớ xoá các ký tự thoát\\
khỏi chuỗi trước đó, nếu không quá trình giải mã sẽ không thành công:$ echo 'uiHDEhxyvj6lF5GalHh9TsMZb4bG6Y9qGmFb9S3XI291MncHcaxP0rFu0kyjxlEXDs8y4L1KOhy6iyB42Lh+vZ4XIMjmvU4rZrjsBZ5Tx Qo9hL0lBW7o3FRM/UIXCeRk39ObUl2AjDmQ0mcw1byJI5v9KVJnNMaHdRCy/kvN6bx3qqjIhIMu0JExp4UVkAX2Mxb9b+c4o2DiZF5pY6ZfbuEmjS bvGRJXyswkOJ4jTZl+7e6+SZfEal8HJyRfZKiqTjrz+DLjYSlXrfIRqlvKeAFGOJq6IRojNWiTOOh8Zorc0iHDTIkf+MY0scfbBUo5m30Bf4w==' | base64 -d | openssl rsautl -decrypt -inkey private_key -oaep
Lệnh này sẽ in mật khẩu đã giải mã:
dDkJ_3]*QYS-#>X
Tên người dùng và mật khẩu của tài khoản này sẽ là:
username: example-user password: dDkJ_3]*QYS-#>X
Vứt chìa khoá đi. Không giống như Khoá SSH, các khoá dùng để truy xuất/đặt lại mật khẩu Windows là khoá tạm thời. Bạn không nên sử dụng lại cặp khoá công khai/riêng tư và việc này có thể không hoạt động như mong đợi. Nếu khoá đã được lưu vào ổ đĩa, thì các tệp sẽ bị xoá khi quá trình này kết thúc. Tốt hơn hết, nếu có thể, hãy giữ khoá trong bộ nhớ và loại bỏ khoá đó khi quá trình hoàn tất.
Kiến trúc chuyển trạng thái đại diện (REST)
Để sử dụng các mẫu API REST trên trang này trong môi trường phát triển cục bộ, bạn sử dụng thông tin xác thực mà bạn cung cấp cho CLI gcloud.
After installing the Google Cloud CLI, sign in to the gcloud CLI with your federated identity and then initialize it by running the following command:
gcloud init
Để biết thêm thông tin, hãy xem phần Xác thực để sử dụng REST trong tài liệu xác thực Trusted Cloud .
Tự động tạo mật khẩu
Go
Python
Java
Hướng dẫn thủ công
Các bước trong hướng dẫn thủ công này sử dụng OpenSSL cho các hàm mã hoá và công cụ shell Bash/Linux cho một số hàm khác, nhưng bạn có thể triển khai nhiều cách khác.
Bước tiếp theo
Trừ phi có lưu ý khác, nội dung của trang này được cấp phép theo Giấy phép ghi nhận tác giả 4.0 của Creative Commons và các mẫu mã lập trình được cấp phép theo Giấy phép Apache 2.0. Để biết thông tin chi tiết, vui lòng tham khảo Chính sách trang web của Google Developers. Java là nhãn hiệu đã đăng ký của Oracle và/hoặc các đơn vị liên kết với Oracle.
Cập nhật lần gần đây nhất: 2025-06-11 UTC.
[[["Dễ hiểu","easyToUnderstand","thumb-up"],["Giúp tôi giải quyết được vấn đề","solvedMyProblem","thumb-up"],["Khác","otherUp","thumb-up"]],[["Thiếu thông tin tôi cần","missingTheInformationINeed","thumb-down"],["Quá phức tạp/quá nhiều bước","tooComplicatedTooManySteps","thumb-down"],["Đã lỗi thời","outOfDate","thumb-down"],["Vấn đề về bản dịch","translationIssue","thumb-down"],["Vấn đề về mẫu/mã","samplesCodeIssue","thumb-down"],["Khác","otherDown","thumb-down"]],["Cập nhật lần gần đây nhất: 2025-06-11 UTC."],[[["The `gcloud compute reset-windows-password` command allows users with project write access to securely reset or retrieve passwords for accounts on Windows instances."],["This command works by sending a username and RSA public key to the instance, where an agent either creates a new account or resets an existing one's password."],["The agent encrypts the generated password using the provided public key, then sends it back to the client for decryption with the corresponding private key."],["Before using this command, users must create a Windows instance and set up authentication through either the Google Cloud console, gcloud CLI, or REST API, depending on their preferred method."],["The process of creating or resetting a password can also be done manually by creating a key pair, encoding the public key, and then using it to create or reset an account on the instance."]]],[]] -