توليد المفتاح على الجهاز الذي تجلس أمامه
ليس على الخادم. النصف الخاص يجب ألا يكون موجودًا أبدًا على مضيف قد تفقد الوصول إليه، ونسخه حولك يهزم الغرض من وجوده.
ssh-keygen -t ed25519 -a 100 -C "laptop-2026"-a 100 يحدد عدد جولات KDF التي تحمي عبارة المرور، وهي الشيء الوحيد الذي يقف بين كمبيوتر محمول مسروق وأسطولك. استخدم عبارة مرور. إذا كنت تمتلك رمزًا للأجهزة، فاستخدمه بدلاً من ذلك:
ssh-keygen -t ed25519-sk -O resident -C "token-1"تثبيت النصف العام
ssh-copy-id -i ~/.ssh/id_ed25519.pub deploy@<ipv4>يدويًا، من جلسة جذر، إذا لم يكن للحساب كلمة مرور بعد:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /dev/null /home/deploy/.ssh/authorized_keys
cat >> /home/deploy/.ssh/authorized_keysالصق السطر الواحد، ثم Ctrl-D. الأذونات تهم أكثر مما يتوقع الناس: يرفض sshd المجلد الرئيسي أو دليل .ssh الذي يمكن كتابته من المجموعة ولا يشرح نفسه إلا في سجل الخفي، وليس للعميل أبدًا.
تقييد المفتاح أثناء وجودك هناك
الخيارات في authorized_keys تنطبق لكل مفتاح. restrict يطفئ كل شيء، ثم تعيد إضافة ما يحتاجه المفتاح حقًا:
restrict,pty ssh-ed25519 AAAAC3Nza... deploy@laptopالمفتاح الموجود لتشغيل مهمة واحدة يجب أن يُسمح له بتشغيل مهمة واحدة:
restrict,command="/usr/local/bin/backup-receive" ssh-ed25519 AAAAC3Nza... backupاختبر قبل أن تقفل
اترك الجلسة الأولى متصلة. من محطة طرفية ثانية:
ssh -o PreferredAuthentications=publickey deploy@<ipv4> idإذا طبع ذلك معرّف المستخدم الخاص بك، فإن مسار المفتاح يعمل. إذا لم يطبع، فإن ssh -vvv على العميل وjournalctl -u ssh -n 50 على الخادم سيقولان فيما بينهما أي جانب غير سعيد. إنها أذونات في نصف الحالات تقريبًا واسم مستخدم خاطئ في معظم الباقي.
إيقاف كلمات المرور
cat > /etc/ssh/sshd_config.d/20-keys-only.conf <<EOF
PubkeyAuthentication yes
PasswordAuthentication no
KbdInteractiveAuthentication no
PermitEmptyPasswords no
AuthenticationMethods publickey
EOF
sshd -t && systemctl reload sshAuthenticationMethods publickey هو الحزام تحت الأقواس. حتى إذا أعاد إدراج لاحق كلمات المرور بهدوء، فإن الخفي ما زال يرفض أي شيء ليس مفتاحًا.
أكد من العميل أن الباب مغلق:
ssh -o PreferredAuthentications=password deploy@<ipv4>النتيجة المتوقعة هي Permission denied (publickey).
المفاتيح في وقت النشر
تحتفظ اللوحة بقائمة مفاتيح لكل حساب. حدد哪些 التي تريدها ويكتب cloud-init بها أثناء التمهيد الأول، مما يعني أن مثيلًا يمكن أن يوجد لأول مرة مع إيقاف تشغيل مصادقة كلمة المرور بالفعل. إرفاق المفتاح بالطلب يحول الدقائق العشر أعلاه إلى واحدة.
عندما تفقد المفتاح
لا يوجد استرداد قائم على الهوية هنا، لأننا لا نحتفظ بأي هوية. وحدة التحكم خارج النطاق هي طريق العودة: تصل إلى المثيل عبر مسار لا يلمس sshd أبدًا، ومن قشرة إنقاذ يمكنك إلحاق مفتاح جديد والمتابعة.
احتفظ بمفتاح ثانٍ على جهاز ثانٍ ولن تحتاج أبدًا إلى قراءة هذه المقالة.