הפקודה gcloud compute reset-windows-password
מאפשרת למשתמש עם הרשאת כתיבה לפרויקט ב-Compute Engine לאחזר בצורה מאובטחת סיסמאות לחשבונות במכונות של Windows.
הפקודה עושה זאת על ידי שליחת שם משתמש ומפתח ציבורי של RSA למכונה. לאחר מכן, הסוכן שפועל במכונה מבצע אחת מהפעולות הבאות:
- המערכת יוצרת חשבון במכונה בשם המשתמש הזה ויוצרת סיסמה אקראית.
- איפוס הסיסמה לערך אקראי אם החשבון כבר קיים.
הסוכן שפועל במכונה מצפין את הסיסמה באמצעות המפתח הציבורי שסופק, ושולח אותה חזרה ללקוח כדי שהמפתח הפרטי התואם יפענח אותה.
בקטע הזה מוסבר איך התהליך הזה עובד, ומופיעות כמה דוגמאות לסקריפטים שמחקים את השלבים האלה באופן פרוגרמטי. אם רוצים לבצע את השלבים האלה באופן ידני, צריך לקרוא את הקטע הוראות ידניות.
לפני שמתחילים
- יוצרים מכונה של Windows.
-
אם עדיין לא עשיתם זאת, מגדירים אימות.
אימות הוא התהליך שבו הזהות שלכם מאומתת כדי לקבל גישה ל Google Cloud שירותים ולממשקי API.
כדי להריץ קוד או דוגמאות מסביבת פיתוח מקומית, אפשר לבצע אימות ל-Compute Engine על ידי בחירה באחת מהאפשרויות הבאות:
Select the tab for how you plan to use the samples on this page:
Console
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
gcloud
-
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
- Set a default region and zone.
יצירת זוג מפתחות RSA של 2048 ביט ב-OpenSSL, יוצרים את זוג המפתחות הזה באמצעות הפקודה:
$ openssl genrsa -out private_key 2048
הפקודה הזו יוצרת קובץ מפתח פרטי בשם private_key עם תוכן שנראה כך:
$ 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-----
יוצרים מפתח ציבורי. כדי ליצור את המפתח הציבורי, מריצים את הפקודה:
$ openssl rsa -pubout -in private_key -out public_key
כך נוצר קובץ public_key שנראה כך:
$ 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-----
חילוץ המערך והמעריך המפתחות הציבוריים והפרטיים מורכבים ממודולוס ומחזק. מחלצים מהמפתח הציבורי את המודולוס ואת המערך:
$ 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)
מקודדים את המערך ואת המערך המשויך. צריך לחלץ את המנה והחזקה ולקודד אותם ב-base64. לפני קידוד המכפיל, מסירים את הבייט האפס המוביל מהמכפיל. כברירת מחדל, הקובץ public_key הוא כבר מחרוזת בייטים בקידוד base64 שמכילה את המידע הבא:
- 32 בייטים של פרטי כותרת
- בייט אחד עם האפס המוביל של המכנה
- 256 בייטים של מודולוס
- 2 בייטים של כותרת המעריך
- 3 בייטים של מעריך
צריך לחלץ את המכפיל ואת המערך ולקודד אותם בנפרד משאר תוכן הקובץ. מחלצים ומקודדים את המנה והחזקה באמצעות הפקודות הבאות:
$ 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
אם נתקלתם בבעיות בקידוד המכפיל, חשוב לוודא שהסרתם את הבייט האפס המוביל מהמכפיל לפני שניסיתם לקודד אותו.
יוצרים אובייקט JSON עם שם משתמש ופרטי מפתח ציבורי. יוצרים אובייקט JSON עם הנתונים הבאים:
userName
: שם המשתמש להתחברות למכונה.modulus
: המודולוס בקידוד base64 של המפתח הציבורי.exponent
: המכפיל בקידוד base64 של המפתח הציבוריemail
: כתובת האימייל של המשתמש שמבקש את הסיסמה. זו צריכה להיות כתובת האימייל של חשבון Google שאומת ב-API.expireOn
: חותמת זמן מקודדת לפי RFC 3399 של מועד התפוגה של המפתח. השעה צריכה להיות לפי שעון UTC, ומוגדרת כ-5 דקות קדימה. מכיוון שהמפתחות האלה משמשים רק ליצירת שם המשתמש והסיסמה, הם לא נחוצים יותר אחרי יצירת הסיסמה. אם למפתח אין תאריך תפוגה או שהתאריך הזה כבר עבר, הסוכן לא ישתמש בו וידלג עליו לגמרי.
לדוגמה:
{\"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\"}
שימו לב שאין להוסיף מעברים לשורה חדשה למחרוזת ה-JSON.
מוסיפים את אובייקט ה-JSON למטא-נתונים של המכונה. מגדירים את המטא-נתונים של המכונה באמצעות מפתח המטא-נתונים
windows-keys
ואת אובייקט ה-JSON בתור ערך המפתח.כדי לעדכן את המטא-נתונים של המכונה ב-API, צריך לספק טביעת אצבע בבקשה. שולחים בקשת GET למכונה כדי לקבל את טביעת האצבע הנוכחית שלה:
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]..
בשלב הבא, שולחים בקשה מסוג
POST
לשיטהsetMetadata
, ומספקים את טביעת האצבע ואת אובייקט ה-JSON שיצרתם: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" } ] }
שם המפתח צריך להיות
windows-keys
והערך צריך להיות מחרוזת JSON אחת או יותר כמו זו שלמעלה. יש להפריד בין מחרוזות מרובות באמצעות שורות חדשות. כשמוסיפים כמה רשומות, חשוב לוודא שהערך של המטא-נתונים לא חורג מ-32KB.קריאת הפלט מיציאה טורית מספר ארבע הסוכן במכונה ייקח באופן אוטומטי את הערך של
windows-keys
ויצור סיסמה מוצפנת. קוראים את הסיסמה המוצפנת באמצעות שאילתה לשקע הטורי מספר ארבע. ב-API, שולחים בקשהGET
ל-methodgetSerialPortOutput
, ומעבירים אתport=4
כפרמטר של שאילתה: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" }
הפלט של היציאה הטורי עשוי לכלול מספר תשובות, מופרדות על ידי שורות חדשות. כדי למצוא את התשובה הנכונה, צריך להתאים את המכפיל שהעברתם לפלט של היציאה הטורי. כל תגובה היא מחרוזת בקידוד JSON עם השדות הבאים:
userName
: שם המשתמש שהוענק למכונה.passwordFound
: ערך בוליאני שמציין אם יצירת הסיסמה בוצעה בהצלחה.encryptedPassword
: סיסמה מוצפנת בקידוד base64.modulus
: המכפיל שהוענק קודם.exponent
: המעריך שהוענק קודם.
למידע על שמירת פלט של יציאה טורית, ראו הצגת פלט של יציאה טורית.
פענוח הסיסמה כדי לקבל את הסיסמה, משתמשים במפתח הפרטי שנוצר קודם כדי לפענח את הסיסמה המוצפנת. צריך לפענח את הסיסמה באמצעות Optimal Asymmetric Encryption Padding (OAEP). ב-OpenSSL, הפקודה לפענוח נתוני הקלט היא:
$ openssl rsautl -decrypt -inkey private_key -oaep
כדי לפענח את הסיסמה שלמעלה, צריך לספק את הערך של
encryptedPassword
. חשוב להסיר מראש את תוו הבריחה\\
מהמחרוזת, אחרת פענוח הנתונים ייכשל:$ echo 'uiHDEhxyvj6lF5GalHh9TsMZb4bG6Y9qGmFb9S3XI291MncHcaxP0rFu0kyjxlEXDs8y4L1KOhy6iyB42Lh+vZ4XIMjmvU4rZrjsBZ5Tx Qo9hL0lBW7o3FRM/UIXCeRk39ObUl2AjDmQ0mcw1byJI5v9KVJnNMaHdRCy/kvN6bx3qqjIhIMu0JExp4UVkAX2Mxb9b+c4o2DiZF5pY6ZfbuEmjS bvGRJXyswkOJ4jTZl+7e6+SZfEal8HJyRfZKiqTjrz+DLjYSlXrfIRqlvKeAFGOJq6IRojNWiTOOh8Zorc0iHDTIkf+MY0scfbBUo5m30Bf4w==' | base64 -d | openssl rsautl -decrypt -inkey private_key -oaep
הפקודה מדפיסה את הסיסמה המוצפנת:
dDkJ_3]*QYS-#>X
שם המשתמש והסיסמה של החשבון הזה יהיו:
username: example-user password: dDkJ_3]*QYS-#>X
זורקים את המפתחות. בניגוד למפתחות SSH, המפתחות המשמשים לאחזור או לאיפוס של סיסמאות ל-Windows אמורים להיות זמניים. לא מומלץ לעשות שימוש חוזר בזוגות של מפתחות ציבוריים/פרטיים, ויכול להיות שהם לא יפעלו כצפוי. אם המפתח נשמר בדיסק, צריך למחוק את הקבצים בסוף התהליך. עדיף, אם אפשר, לשמור את המפתח בזיכרון ולמחוק אותו בסיום התהליך.
REST
כדי להשתמש בדוגמאות של API ל-REST שבדף הזה בסביבת פיתוח מקומית, צריך להשתמש בפרטי הכניסה שאתם נותנים ל-CLI של gcloud.
After installing the Google Cloud CLI, initialize it by running the following command:
gcloud init
If you're using an external identity provider (IdP), you must first sign in to the gcloud CLI with your federated identity.
למידע נוסף, ראו אימות לשימוש ב-REST במסמכי העזרה בנושא Google Cloud אימות.
אוטומציה של יצירת סיסמה
Go
Python
Java
הוראות ידניות
השלבים במדריך הזה מתבססים על OpenSSL לפונקציות הקריפטוגרפיות ועל הכלים של מעטפת Bash/Linux לפונקציות אחרות, אבל יש אפשרויות רבות נוספות להטמעה.
המאמרים הבאים
אלא אם צוין אחרת, התוכן של דף זה הוא ברישיון Creative Commons Attribution 4.0 ודוגמאות הקוד הן ברישיון Apache 2.0. לפרטים, ניתן לעיין במדיניות האתר Google Developers. Java הוא סימן מסחרי רשום של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-06-11 (שעון UTC).
-