
هذا الدور الخاص بـ Ansible يوفر العديد من إعدادات ssh المتعلقة بالأمان، مما يوفر حماية أساسية شاملة.
تنبيه: تم ترحيل هذا الدور إلى مجموعة التصلب الخاصة بنا:
يرجى فتح أي مشكلات وطلبات سحب هناك!
network_ipv6_enable
ssh_listen_to للاستماع إلى عناوين IPv6 (على سبيل المثال [::]).ssh_server_ports
ssh_client_port
ssh_listen_to
ssh_host_key_files
ssh_host_key_algorithms
ssh_client_alive_interval
ssh_client_alive_count
ssh_permit_tunnel
ssh_remote_hosts
defaults/main.yml.ssh_permit_root_login
without-password أو yes لتمكين تسجيل الدخول كجذرssh_allow_tcp_forwarding
'no' لتعطيل إعادة توجيه TCP. اضبط على 'yes' للسماح بإعادة توجيه TCP. إذا كنت تستخدم إصدار OpenSSH >= 6.2، يمكنك تحديد 'yes' أو 'no' أو 'all' أو 'local'. 'yes' و 'no' مع علامات الاقتباس.ssh_gateway_ports
falsefalse لتعطيل ربط المنافذ المعاد توجيهها بعناوين غير loopback. اضبط على true لفرض الربط على عنوان wildcard. اضبط على clientspecified للسماح للعميل بتحديد العنوان الذي سيتم الربط به.ssh_allow_agent_forwarding
ssh_x11_forwarding
ssh_pam_support
ssh_use_pam
ssh_gssapi_support
ssh_kerberos_support
ssh_deny_users
ssh_allow_users
ssh_deny_groups
ssh_allow_groups
ssh_authorized_keys_file
ssh_trusted_user_ca_keys_file
ssh_trusted_user_ca_keys
ssh_trusted_user_ca_keys_file.ssh_authorized_principals_file
ssh_trusted_user_ca_keys_file.ssh_authorized_principals
default_custom.yml لجميع الخيارات. يُستخدم فقط إذا تم تعيين ssh_authorized_principals_file.ssh_print_motd
ssh_print_pam_motd
ssh_print_last_log
sftp_enabled
sftp_umask
sftp_chroot
sftp_chroot_dir
ssh_client_roaming
sshd_moduli_file
sshd_moduli_minimum
ssh_challengeresponseauthentication
ssh_client_password_login
true للسماح بالمصادقة القائمة على كلمة المرور مع عميل sshssh_server_password_login
true للسماح بالمصادقة القائمة على كلمة المرور مع خادم sshssh_banner
falsetrue لطباعة لافتة عند تسجيل الدخولssh_banner_path
ssh_client_hardening
truefalse لإيقاف تصلب العميلssh_client_port
'22'ssh_client_compression
falsessh_compression
falsessh_login_grace_time
30sssh_max_auth_retries
2ssh_max_sessions
10ssh_print_debian_banner
falsetrue لطباعة لافتة خاصة بـ Debianssh_server_enabled
truefalse لتعطيل خادم opensshdssh_server_hardening
truefalse لإيقاف تصلب الخادمssh_server_match_address
ssh_server_match_group
ssh_server_match_user
ssh_server_match_local_port
ssh_server_permit_environment_vars
noyes لتحديد أن ~/.ssh/environment وخيارات environment= في ~/.ssh/authorized_keys تتم معالجتها بواسطة sshd. مع إصدار openssh 7.8، من الممكن تحديد قائمة بيضاء لأسماء متغيرات البيئة بالإضافة إلى إعدادات "yes" أو "no" العامةssh_server_accept_env_vars
ssh_use_dns
falsessh_server_revoked_keys
ssh_max_startups
ssh_macs
defaults/main.ymlssh_kex
defaults/main.ymlssh_ciphers
defaults/main.ymlssh_custom_options
sshd_custom_options
sshd_syslog_facility
sshd_log_level
sshd_strict_modes
sshd_authenticationmethods
publickeydefaults/main.ymlإذا كنت تريد تكوين خيارات ssh غير المدرجة أعلاه، يمكنك استخدام ssh_custom_options (لـ /etc/ssh/ssh_config) أو sshd_custom_options (لـ /etc/ssh/sshd_config) لتعيينها. سيتم تعيين هذه الخيارات في بداية الملف حتى تتمكن من تجاوز الخيارات في الأسفل من الملف.
مثال على playbook:
- hosts: localhost
roles:
- dev-sec.ssh-hardening
vars:
ssh_custom_options:
- "Include /etc/ssh/ssh_config.d/*"
sshd_custom_options:
- "AcceptEnv LANG"
يستخدم هذا الدور المنفذ الافتراضي 22 أو المنفذ المكون في inventory للاتصال بالخادم. إذا تم تغيير منفذ ssh الافتراضي عبر ssh_server_ports، فبمجرد إعادة تشغيل خادم ssh، سيظل يحاول الاتصال باستخدام المنفذ السابق. لتشغيل هذا الدور مرة أخرى على نفس الخادم، يجب تحديث inventory لاستخدام منفذ ssh الجديد.
إذا كان الثبات مهمًا، يرجى التفكير في استخدام الدور ssh-hardening-fallback، وهو غلاف حول هذا الدور يعود إلى المنفذ 22 إذا كان المنفذ المكون غير قابل للوصول.
- hosts: localhost
roles:
- dev-sec.ssh-hardening
الطريقة المفضلة للاختبار المحلي للدور هي استخدام Docker. ستحتاج إلى تثبيت Docker على نظامك. راجع ابدأ للحصول على حزمة Docker مناسبة لنظامك.
يمكنك أيضًا استخدام vagrant و Virtualbox أو VMWare لتشغيل الاختبارات محليًا. ستحتاج إلى تثبيت Virtualbox و Vagrant على نظامك. راجع تنزيلات Vagrant للحصول على حزمة vagrant مناسبة لنظامك. لجميع اختباراتنا نستخدم test-kitchen. إذا لم تكن معتادًا على test-kitchen، يرجى إلقاء نظرة على دليلهم.
بعد ذلك قم بتثبيت test-kitchen:
# تثبيت التبعيات
gem install bundler
bundle install
# اختبار سريع على جهاز واحد
bundle exec kitchen test ssh-ubuntu1804-ansible-latest
# اختبار على جميع الأجهزة
bundle exec kitchen test
# للتطوير
bundle exec kitchen create ssh-ubuntu1804-ansible-latest
bundle exec kitchen converge ssh-ubuntu1804-ansible-latest
bundle exec kitchen verify ssh-ubuntu1804-ansible-latest
# التنظيف
bundle exec kitchen destroy ssh-ubuntu1804-ansible-latest
# اختبار سريع على جهاز واحد
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test ssh-ubuntu-1804
# اختبار على جميع الأجهزة
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen test
# للتطوير
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen create ssh-ubuntu-1804
KITCHEN_YAML=".kitchen.vagrant.yml" bundle exec kitchen converge ssh-ubuntu-1804
لمزيد من المعلومات راجع test-kitchen
لا أستطيع تسجيل الدخول إلى حسابي. لقد سجلت مفتاح العميل، لكنه ما زال لا يسمح لي بالدخول.
إذا استنفدت جميع المشكلات النموذجية (جدار الحماية، الشبكة، المفتاح المفقود، المفتاح الخاطئ، الحساب المعطل، إلخ)، فقد يكون حسابك مقفلاً. أسرع طريقة لمعرفة ذلك هي النظر إلى تجزئة كلمة المرور لمستخدمك:
sudo grep myuser /etc/shadow
إذا كانت التجزئة تتضمن !، فإن حسابك مقفل:
myuser:!:16280:7:60:7:::
الطريقة الصحيحة لحل ذلك هي فتح قفل الحساب (passwd -u myuser). إذا لم يكن لدى المستخدم كلمة مرور، يمكنك فتحه عبر:
usermod -p "*" myuser
بدلاً من ذلك، إذا كنت تنوي استخدام PAM، فقد قمت بتمكينه عبر ssh_use_pam: true. سيسمح PAM للمستخدمين المقفلين بالدخول بالمفاتيح.
لماذا لا يتصل تطبيقي عبر SSH بعد الآن؟
انظر دائمًا إلى ملفات السجلات أولاً وإذا أمكن انظر إلى التفاوض بين العميل والخادم الذي يتم إكماله عند الاتصال.
لقد رأينا بعض المشكلات في التطبيقات (المبنية على python و ruby) بسبب استخدامها لمجموعة تشفير قديمة. يتعارض هذا مع وحدة التصلب هذه، التي قللت قائمة التشفيرات ورسائل مصادقة التكامل (MACs) وخوارزميات تبادل المفاتيح (KEX) إلى مجموعة أكثر أمانًا.
بعد استخدام الدور، لم تعد وحدة template/copy/file في Ansible تعمل!
يقوم هذا الدور افتراضيًا بتعطيل SFTP. يستخدم Ansible افتراضيًا SFTP لنقل الملفات إلى المضيفين البعيدين. يجب عليك تعيين scp_if_ssh = True في ملف ansible.cfg الخاص بك. بهذه الطريقة يستخدم Ansible SCP لنسخ الملفات. بدلاً من ذلك، يمكنك إعادة تمكين SFTP عن طريق تعيين sftp_enabled إلى true.
لا يمكن إعادة تشغيل خدمة sshd بسبب نقص الصلاحيات
إذا حصلت على الخطأ التالي عند تشغيل المعالج "restart sshd"
Unable to restart service ssh: Failed to restart ssh.service: Access denied
أو
failure 1 running systemctl show for 'ssh': Failed to connect to bus: No such file or directory
إما قم بتشغيل playbook كـ root (بدون become: yes على مستوى playbook)، أو أضف become: yes إلى المعالج.
هذا خطأ في Ansible: راجع هنا و هنا لمزيد من المعلومات.
راجع إرشادات المساهم.
مرخص بموجب رخصة Apache، الإصدار 2.0 (ال"ترخيص")؛ لا يجوز لك استخدام هذا الملف إلا وفقًا للترخيص. يمكنك الحصول على نسخة من الترخيص على
http://www.apache.org/licenses/LICENSE-2.0
ما لم يقتضِ القانون المعمول به أو يتم الاتفاق عليه كتابيًا، يتم توزيع البرنامج المرخص بموجب الترخيص على أساس "كما هو"، دون ضمانات أو شروط من أي نوع، سواء كانت صريحة أو ضمنية. راجع الترخيص للحصول على اللغة المحددة التي تحكم الأذونات والقيود بموجب الترخيص.