Empaquete automáticamente OpenSSH8.4 RPM e integre OpenSSL-1.1.1i en centos7

Proceso de actualización

Rpmbuild primera reproducción del paquete RPM OpenSSH 8.4, actualización rpm -Uvh, modificar el /etc/pam.d/sshdarchivo, reiniciar el servicio sshd, la actualización está completa.

#!/bin/bash
set -ex
yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip -y
mkdir -p /root/rpmbuild/{SOURCES,SPECS}
cd /root/rpmbuild/SOURCES
if [[ ! -f "openssh-8.4p1.tar.gz" ]];then
    wget -c http://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-8.4p1.tar.gz
fi
if [[ ! -f "x11-ssh-askpass-1.2.4.1.tar.gz" ]];then
    wget https://src.fedoraproject.org/repo/pkgs/openssh/x11-ssh-askpass-1.2.4.1.tar.gz/8f2e41f3f7eaa8543a2440454637f3c3/x11-ssh-askpass-1.2.4.1.tar.gz
fi
tar zxvf openssh-8.4p1.tar.gz openssh-8.4p1/contrib/redhat/openssh.spec
mv openssh-8.4p1/contrib/redhat/openssh.spec ../SPECS/
chown sshd:sshd /root/rpmbuild/SPECS/openssh.spec
cp /root/rpmbuild/SPECS/openssh.spec /root/rpmbuild/SPECS/openssh.spec_def
sed -i -e "s/%global no_gnome_askpass 0/%global no_gnome_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i -e "s/%global no_x11_askpass 0/%global no_x11_askpass 1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i -e "s/^BuildRequires: openssl-devel < 1.1/#BuildRequires: openssl-devel < 1.1/g" /root/rpmbuild/SPECS/openssh.spec
sed -i -e '/with-privsep-path/a\        --with-openssl-includes=/usr/local/openssl/include \\\n        --with-ssl-dir=/usr/local/openssl \\' /root/rpmbuild/SPECS/openssh.spec 
cd /root/rpmbuild/SPECS/
rpmbuild -ba openssh.spec

Manejo de errores comunes

El uso de la carcasa de empaquetado automática anterior no causará el siguiente error, porque se ha procesado automáticamente.

El primer error: openssl-devel <1.1 es requerido por openssh-8.4p1-1.el7.x86_64

No se pudo construir la dependencia: openssl-devel <1.1 is opensh-8.4p1-1.el7.x86_64. Solución:

[root @ localhost SPECS] # vim openssh.spec Comente la línea BuildRequires: openssl-devel <1.1

El segundo error: errores de compilación de RPM:

Se encontraron archivos instalados (pero no empaquetados):

RPM build errors:
    Installed (but unpackaged) file(s) found:
    /usr/libexec/openssh/ssh-sk-helper
    /usr/share/man/man8/ssh-sk-helper.8.gz

Solución:

vi /usr/lib/rpm/macros

#%__check_files %{_rpmconfigdir}/check-files %{buildroot}
注释改行

Empaquetado con éxito

imagen-20210118114704199

Comprimir y empaquetar en un archivo

zip openssh84.zip openssh*.rpm openssl-1.1.1i-1.el7.x86_64.rpm

potenciar

# 升级,先升级openssl,因为打包的时候使用了OpenSSL 1.1.1i
rpm -Uvh openssl-1.1.1i-1.el7.x86_64.rpm --nodeps --force && rpm -Uvh /tmp/openssh*.rpm
# 修改权限,必须修改权限,否则重启sshd失败,
cd /etc/ssh/
chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
# 允许 root登录,可选
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 不修改这个文件,会出现密码是对的,却无法登陆。
cat <<EOF>/etc/pam.d/sshd
#%PAM-1.0
auth       required     pam_sepermit.so
auth       include      password-auth
account    required     pam_nologin.so
account    include      password-auth
password   include      password-auth
## pam_selinux.so close should be the first session rule
session    required     pam_selinux.so close
session    required     pam_loginuid.so
## pam_selinux.so open should only be followed by sessions to be executed in the user context
session    required     pam_selinux.so open env_params
session    optional     pam_keyinit.so force revoke
session    include      password-auth
EOF
# 重启服务
systemctl restart sshd

imagen-20210119104921577

Introducción a los roles de Ansible

Cuando empezamos a aprender a usar el libro de jugadas, es posible que escribiéramos el libro de jugadas como un archivo grande. Más adelante, es posible que espere que estos archivos se puedan reutilizar fácilmente, por lo que debe reorganizarlos. Roles significa roles, que se utilizan principalmente para encapsular libros de jugadas para lograr la reutilización. En ansible, los roles están representados por la estructura organizativa de los archivos.

Para un rol, su estructura de organización de archivos se muestra en la siguiente figura.

[root@ansible ansible]# ls openssh/*
openssh/default:

openssh/files:
openssh84.zip  sshd

openssh/tasks:
main.yaml

openssh/templates:

openssh/vars:

Primero, necesita tener un directorio de roles. Al mismo tiempo, en el directorio donde se encuentra el directorio de roles, también hay un archivo de libro de jugadas, aquí está main.yaml. El archivo main.yaml es el archivo que ansible-playbook necesita ejecutar. El rol se define en este archivo. Cuando se ejecuta el rol, Buscará archivos relacionados en el directorio de roles correspondiente en roles.

Los subdirectorios del directorio de roles son cada rol. Por ejemplo, aquí solo hay un rol llamado openssh, y en el directorio de roles, hay varios directorios con nombres fijos (si no, ignórelos). En estos directorios, también hay algunos archivos con nombres fijos Además de los archivos con nombres fijos, se pueden nombrar otros archivos de forma arbitraria. El siguiente es el significado de cada directorio:

  • directorio de tareas: almacenar lista de tareas. Si el rol va a tener efecto, este directorio debe tener un archivo de tarea principal main.yml. En main.yml, puede usar incluir para incluir otros archivos en el mismo directorio (tareas).
  • Directorio de controladores: el directorio donde se almacenan los controladores. Para que surta efecto, el archivo debe llamarse main.yml.
  • Directorio de archivos: al ejecutar el módulo de copia o script en la tarea, si se usa una ruta relativa, el archivo correspondiente se encontrará en este directorio.
  • directorio de plantillas: Al ejecutar el módulo de plantilla en la tarea, si se utiliza una ruta relativa, el archivo del módulo correspondiente se encontrará en este directorio.
  • directorio vars: define variables específicas del rol, si hay un archivo var, debe ser el archivo main.ym l.
  • directorio de valores predeterminados: Defina las variables predeterminadas del rol Las variables predeterminadas del rol tienen la prioridad más baja y serán sobrescritas por variables del mismo nombre en cualquier otro nivel. Si hay un archivo var, debe ser el archivo main.yml.
  • metadirectorio: se utiliza para definir dependencias de roles. Si se requieren dependencias de roles, el archivo debe ser main.yml.

Al ver estas estimaciones, se sorprende, solo mire los ejemplos a continuación para comprender.

Use Ansible Roles para actualizar OpenSSH en lotes

Aquí se demuestra el uso de Ansible Roles para actualizar OpenSSH a la versión 8.4 en 100 CentOS 7 en lotes. Este es el ejemplo de roles de primer nivel.

El primero es la estructura del archivo.

[root@ansible ansible]# ls openssh/*
openssh/default:

openssh/files:
openssh84.zip  sshd

openssh/tasks:
main.yaml

openssh/templates:

openssh/vars:

El archivo de entrada es tasks / main.yaml, mira el contenido

[root@ansible openssh]# cat tasks/main.yaml 
---
    - name: Copy ssh to agent.
      unarchive:
        src: openssh84.zip
        dest: /tmp

    - name: Copy ssh file to agent.
      copy:
        src: sshd
        dest: /etc/pam.d/sshd
        backup: yes

    - name: update openssl openssh
      shell: |
        cd /tmp 
        rpm -Uvh openssl-1.1.1i-1.el7.x86_64.rpm --nodeps --force && rpm -Uvh /tmp/openssh*.rpm
        cd /etc/ssh/ 
        chmod 400 ssh_host_ecdsa_key ssh_host_ed25519_key ssh_host_rsa_key
        # echo "PermitRootLogin no" >> /etc/ssh/sshd_config

    - name: Restart sshd
      systemd:
        state: restarted
        name: sshd

Ubicado en el directorio de archivos, openssh8.zip es un paquete OpenSSH 8.4 rpm empaquetado y luego comprimido en un paquete zip.

sshd es modificar el /etc/pam.d/sshdarchivo

Entonces, este main.yaml significa descomprimir openssh8.zip en el directorio / tmp del host de destino, copiar los archivos que se modificarán en el directorio del host de destino, realizar la actualización y finalmente reiniciar el servicio sshd.

Cuando desee actualizar todas las máquinas, simplemente escriba el host y los roles para ejecutar en el main.yaml más externo, como se muestra en la figura

- hosts:
  # - 10.11.19.4
  - all

  gather_facts: no
  become: yes
  roles:
    - openssh

Supongo que te gusta

Origin blog.51cto.com/m51cto/2596862
Recomendado
Clasificación