קביעת תצורה של אימות מפתח ציבורי SSH ב- Windows
במאמר זה, נראה כיצד להגדיר אימות SSH ב- Windows באמצעות מפתחות RSA או EdDSA. בואו נראה כיצד ליצור זוג מפתחות ציבוריים ופרטיים ב- Windows ולהגדיר שרת OpenSSH ב- Windows 10/11 או Windows Server 2019/2022 לאימות מבוסס מפתח (ללא סיסמאות).
אימות מבוסס מפתח SSH נמצא בשימוש נרחב בעולם לינוקס, אך ב- Windows, הוא הופיע לאחרונה. הרעיון הוא שהמפתח הציבורי של הלקוח מתווסף לשרת SSH, וכאשר לקוח מנסה להתחבר אליו, השרת בודק אם ללקוח יש את המפתח הפרטי המתאים. בדרך זו משתמש מרוחק יכול לבצע אימות ב- Windows מבלי להזין סיסמה.
יצירת זוג מפתחות SSH ב- Windows
עליך ליצור שני מפתחות SSH (ציבוריים ופרטיים) במחשב הלקוח שבהם תשתמש כדי להתחבר למחשב מארח Windows מרוחק שבו פועל OpenSSH. מפתח פרטי מאוחסן בצד לקוח (שמור על המפתח בטוח ואל תשתף אותו עם אף אחד!), ומפתח ציבורי נוסף לקובץ authorized_keys בשרת SSH. כדי ליצור מפתחות RSA בלקוח Windows, עליך להתקין את לקוח OpenSSH.
ב- Windows 10/11 וב- Windows Server 2019/2022, לקוח OpenSSH מותקן כתכונה אופציונלית של Windows באמצעות PowerShell:
Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0בגירסאות קודמות של Windows, באפשרותך להתקין את יציאת Win32-OpenSSH מ- GitHub (עיין בדוגמה במאמר אודות הגדרת שרת SFTP (SSH FTP) ב- Windows).
פתח הפעלת PowerShell רגילה (ללא עילים) וצור זוג מפתחות ED25519 באמצעות הפקודה:
ssh-keygen -t ed25519
כברירת מחדל, הכלי ssh-keygen יוצר מפתחות RSA 2048. נכון לעכשיו, מומלץ להשתמש ED25519 במקום מפתחות RSA.
תתבקש לספק סיסמה כדי להגן על המפתח הפרטי. אם תציין את הסיסמה, יהיה עליך להזין אותה בכל פעם שתשתמש במפתח זה לאימות SSH. לא הזנתי ביטוי סיסמה (לא מומלץ).
Generating public/private ed25519 key pair.
Enter file in which to save the key (C:\Users\myuser/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\myuser/.ssh/id_ed25519.
Your public key has been saved in C:\Users\myuser/.ssh/id_ed25519.pub.
The key fingerprint is: SHA256:xxxxxxxx myuser@computername
The key's randomart image is:
+--[ED25519 256]--+
+----[SHA256]-----+
Ssh-keygen ייצור את ספריית .ssh בפרופיל של משתמש Windows נוכחי (
%USERPROFILE%\.ssh) וליצור 2 קבצים:
id_ed25519- מפתח פרטי (אם יצרת מפתח RSA, הקובץ ייקרא
id_rsa)
id_ed25519.pub- מפתח ציבורי (מפתח RSA דומה נקרא
id_rsa.pub
לאחר יצירת מפתחות SSH, תוכל להוסיף את המפתח הפרטי שלך לשירות SSH Agent, המאפשר לך לנהל בנוחות מפתחות פרטיים ולהשתמש בהם לאימות.
שירות SSH Agent יכול לאחסן את המפתחות הפרטיים שלך ולספק אותם בהקשר האבטחה של המשתמש הנוכחי. הפעל את שירות ssh-agent וקבע את תצורתו כך שיתחיל באופן אוטומטי להשתמש בפקודות ניהול השירות של PowerShell:
set-service ssh-agent StartupType ‘Automatic’
Start-Service ssh-agentהוסף את המפתח הפרטי שלך למסד הנתונים של סוכן ssh:
ssh-add "C:\Users\youruser\.ssh\id_ed25519"Identity added: C:\Users\youruser\.ssh\id_ed25519 (youruser@computername)או כדלקמן:
ssh-add.exe $ENV:UserProfile\.ssh\id_rsaOpenSSH: קביעת תצורה של אימות מבוסס מפתח עם מפתח ציבורי ב- Windows
עכשיו אתה צריך להעתיק את המפתח הציבורי SSH לשרת SSH. שרת SSH בדוגמה זו הוא מחשב מרוחק של Windows 11 בעל שירות OpenSSH מותקן ומוגדר.
אתה יכול לבדוק את המדריך המלא "כיצד להגדיר שרת OpenSSH ב- Windows? ”.
העתק את הקובץ id_ed25519.pub אל .ספריית SSH בפרופיל המשתמש שבו תשתמש כדי להתחבר לשרת SSH. לדוגמה, יש לי חשבון user1 במכשיר Windows 11 המרוחק שלי, כך שעליי להעתיק את המפתח אל C:\Users\user1\.ssh\authorized_keys.
באפשרותך להעתיק את המפתח הציבורי לשרת SSH מהלקוח באמצעות SCP:
scp C:\Users\youruser\.ssh\id_rsa.pub admin@192.168.1.15:c:\users\admin\.ssh\authorized_keysבאפשרותך להוסיף מפתחות ציבוריים מרובים לקובץ authorized_keys יחיד.
אימות מפתח ציבורי אינו זמין כברירת מחדל בשרת OpenSSH ב- Windows. אתה יכול לבדוק את זה sshd_config. הדרך הקלה ביותר לקבל רשימה של שיטות אימות מותרות ב- OpenSSH היא להשתמש בפקודה הבאה של PowerShell (Select-String משמש כאנלוגי של grep ב- PowerShell):
cat "C:\ProgramData\ssh\sshd_config"| Select-String "Authentication"#PubkeyAuthentication yes
#HostbasedAuthentication no
#HostbasedAuthentication
PasswordAuthentication yes
#GSSAPIAuthentication noבדוגמה זו, השורה PubkeyAuthentication היא הערה, כלומר שיטת אימות זו אינה זמינה. פתח את קובץ sshd_config באמצעות פנקס רשימות ובטל את הוספת ההערה לשורה:
Notepad C:\ProgramData\ssh\sshd_configPubkeyAuthentication yesכמו כן, יהיה עליך להשבית את האפשרות StrictModes בקובץ התצורה sshd_config. כברירת מחדל, מצב זה מופעל ומונע אימות מבוסס מפתח SSH אם מפתחות פרטיים וציבוריים אינם מוגנים כראוי. ביטול הערה בשורה
#StrictModes yesולשנות אותו ל
StrictModes noכדי להתחבר למחשב מארח מרוחק באמצעות לקוח SSH מקורי, השתמש בפקודה הבאה:
ssh (username)@(SSH server name or IP address)לדוגמה:
ssh admin@192.168.1.15זה אומר שאתה רוצה להתחבר לשרת SSH מרוחק עם כתובת ה- IP 192.168.1.15 תחת חשבון user1. שירות SSH Agent ינסה באופן אוטומטי להשתמש במפתח הפרטי שלך כדי לבצע אימות במחשב מארח מרוחק.
אם אינך מעוניין להשתמש בשירות ssh-agent לניהול מפתחות SSH, באפשרותך לציין את הנתיב לקובץ המפתח הפרטי שישמש לאימות SSH:
ssh user1@192.168.1.15 -i "C:\Users\youuser\.ssh\id_ed25519"כדי לחבר מארח SSH באמצעות חשבון משתמש מתחום Active Directory, השתמש בתבנית הבאה:
ssh jsmith@a-d.site@192.168.1.15 -i <private_key_absolute_path>
בעת התחברות בפעם הראשונה, עליך להוסיף את טביעת האצבע של מפתח שרת SSH לרשימה המהימנה. הקלד כן -> Enter.
The authenticity of host '192.168.1.15 (192.168.1.15)' can't be established.
ECDSA key fingerprint is SHA256:xxxxxxx.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yesרישום ETW משמש ב- Windows OpenSSH לאחסון יומני SSH במקום קבצי טקסט רגיל. באפשרותך לבדוק את יומני האימות מבוססי מפתח SSH במציג האירועים של Windows (יומני רישום של יישומים ושירותים -> OpenSSH -> Operational).
אם חיבור SSH עם המפתח הפרטי מצליח, האירוע הבא יופיע ביומן OpenSSH:
EventID 4
sshd: Accepted publickey for locadm from 192.168.15.20 port 55772 ssh2: ED25519 SHA256:xxxxxxxאם לא הצלחת להתחבר לשרת SSH באמצעות המפתח הפרטי שלך ואתה עדיין מתבקש להזין סיסמה, סביר להניח שחשבון המשתמש שאליו אתה מנסה להתחבר הוא חבר בקבוצה המקומית של מנהלי מערכת של Windows (SID הקבוצה היא
S-1-5-32-544). נדון בזה בהמשך.
רישום Windows באמצעות מפתח SSH תחת משתמש ניהולי
OpenSSH משתמש בהגדרות אימות מיוחדות מבוססות מפתח עבור חשבונות משתמשים של מנהלי מערכת ב- Windows.
עליך להשתמש בקובץ C:\ProgramData\ssh\administrators_authorized_keys במקום במקש authorized_keys בפרופיל המשתמש. הוסף את מפתח SSH הציבורי שלך לקובץ טקסט זה (מטעמי אבטחה, רק לקבוצות Administrators ו- SYSTEM צריכה להיות הרשאה לקרוא קובץ זה).
באפשרותך לשנות את הרשאות NTFS בקובץ באמצעות:
הכלי icacls:
icacls.exe "C:\ProgramData\ssh\administrators_authorized_keys" /inheritance:r /grant "Administrators:F" /grant "SYSTEM:F"או באמצעות רכיבי ה- cmdlet Get-Acl ו- Set-Acl PowerShell:
get-acl "$env:programdata\ssh\ssh_host_rsa_key" | set-acl "$env:programdata\ssh\administrators_authorized_keys"
לאחר מכן, אימות מפתח SSH פועל גם אם StrictModes מושבת.
כדי להשתמש בקובץ authorized_keys מפרופיל משתמש ולא להעביר את פרטי המפתח הציבורי לקובץ administrators_authorized_keys, באפשרותך להוסיף הערה לשורה בקובץ התצורה של OpenSSH (C:\ProgramData\ssh\sshd_config).
#Match Group administrators
AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keysבנוסף, באפשרותך להשבית את הכניסה באמצעות סיסמת SSH sshd_config:
PasswordAuthentication noאל תשכח להפעיל מחדש את שירות sshd לאחר ביצוע השינויים sshd_config.
restart-service sshdאם תגדיר אימות סיסמה לא, ותקבע את תצורת אימות מפתח SSH באופן שגוי, תופיע שגיאה בעת התחברות באמצעות ssh:
user1@192.168.13.15: Permission denied (publickey,keyboard-interactive).ניתן להשתמש באפשרות PermitRootLogin ב- OpenSSH ב- Linux כדי להגביל כניסת שורש SSH. הוראה זו אינה ישימה ב- Windows OpenSSH, ועליך להשתמש בפרמטר DenyGroups כדי למנוע כניסה ל- ssh תחת חשבונות ניהול:
DenyGroups Administratorsלכן, הגדרת אימות SSH ב- Windows באמצעות זוג מפתחות. כעת תוכל להשתמש בשיטת אימות זו כדי לגשת באופן מאובטח לשרתים מרוחקים, להעביר יציאות באופן אוטומטי במנהרת SSH, להפעיל סקריפטים ולבצע משימות אוטומציה אחרות.













