Centos 7 actualiza el paquete openssh rpm

Si desea operar en el entorno de producción, asegúrese de leer el documento completo
Entorno experimental: sistema fuera de línea Centos7.6
La compilación de openssh 9.1p1 se ha completado con éxito.

1. Prepare el paquete de código fuente de openssh

Comience en el directorio de inicio y configure el directorio de trabajo

cd ~

Descargue el paquete fuente de openssh desde openssh.com

Primero puede intentar ver si su navegador puede hacer clic en el enlace siguiente para evitar que el servidor no obtenga la dirección correspondiente.

# 下载需要的安装包
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz

# Descargue el paquete de código fuente del complemento de diálogo de contraseña x11-ssh-askpass x11, opcional. Si no necesita x11-ssh-askpass, puede omitir el paquete de código fuente modificando el archivo de especificaciones.

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

Verificar la firma del archivo, opcional

# 从openbsd下载签名公钥
wget https://ftp.openbsd.org/pub/OpenBSD/OpenSSH/RELEASE_KEY.asc
# 导入公钥
gpg --import RELEASE_KEY.asc
# 下载源码包签名
wget https://cdn.openbsd.org/pub/OpenBSD/OpenSSH/portable/openssh-9.0p1.tar.gz.asc
# 检验签名
gpg --verify openssh-9.0p1.tar.gz.asc openssh-9.0p1.tar.gz

2. Instale rpm-build y el entorno de compilación.

Instale el paquete rpm-build y otros paquetes necesarios para la compilación

yum install rpm-build zlib-devel openssl-devel gcc perl-devel pam-devel unzip

Agregar compatibilidad con Askpass requiere agregar el paquete de dependencia de instalación libxXt-devel imake gtk2-devel

yum install libXt-devel imake gtk2-devel

Cree el directorio de trabajo rpm-build, SOURCES para colocar el paquete de código fuente, SPECS para colocar el archivo de configuración

mkdir ~/rpmbuild
mkdir ~/rpmbuild/SOURCES
mkdir ~/rpmbuild/SPECS

Instrucciones complementarias, directorio en rpmbuild

  • CONSTRUIR directorio temporal para compilar paquetes rpm
  • BUILDROOT El directorio de instalación temporal del software generado después de la compilación.
  • El directorio donde se encuentra el paquete rpm instalable finalmente generado por RPMS
  • SOURCES Directorio donde se almacenan todo el código fuente y los archivos de parche.
  • Directorio SPECS donde se almacenan los archivos SPEC (importante)
  • La ruta de almacenamiento final del formato del código fuente rpm del software SRPMS.
    Copie el paquete del código fuente en el directorio de trabajo rpmbuild.
cp ~/openssh-9.0p1.tar.gz ~/rpmbuild/SOURCES 

Agregue soporte para Askpass si es necesario

cp ~/x11-ssh-askpass-1.2.4.1.tar.gz ~/rpmbuild/SOURCES

3. Extraer el archivo de especificaciones

Extraiga el archivo de especificaciones del paquete fuente [ el archivo de especificaciones requerido se extrae del paquete tar ]

tar -zxvf openssh-9.0p1.tar.gz openssh-9.0p1/contrib/redhat/openssh.spec
cp ~/openssh-9.0p1/contrib/redhat/openssh.spec ~/rpmbuild/SPECS

4. Modifique el archivo de especificaciones.

Si no necesita Askpass, puede omitir el paquete de código fuente x11-ssh-askpass modificando los parámetros del archivo de especificaciones. Hay 3 lugares que deben comentarse.

# Do we want to disable building of x11-askpass? (1=yes 0=no)
%global no_x11_askpass 1

# Do we want to disable building of gnome-askpass? (1=yes 0=no)
%global no_gnome_askpass 1

#注释掉Source1 x11-ssh-askpass包引用
Source1: http://www.jmknoble.net/software/x11-ssh-askpass/x11-ssh-askpass-%{
    
    aversion}.tar.gz

Resuelva el error de openssl-devel<1.1.
Este error también existe en la versión 9.1p1. Debe comentarse manualmente.
Comente los siguientes elementos de configuración
#BuildRequires: openssl-devel < 1.1

Si la compilación falla, aparece el siguiente
mensaje de error: Se encontró un archivo instalado (pero sin empaquetar):
/usr/libexec/openssh/ssh-sk-helper
/usr/share/man/man8/ssh-sk-helper.8. gz

RPM 构建错误:
发现已安装(但未打包的)文件:
/usr/libexec/openssh/ssh-sk-helper
/usr/share/man/man8/ssh-sk-helper.8.gz

La verificación encontró que el archivo de especificaciones incorporado se actualizó por última vez en 2018, ssh-sk-helper se agregó en diciembre de 2019 y el archivo de especificaciones no está incluido en %file. Modifique el archivo de especificaciones
.

在%attr(0644,root,root) %{
    
    _mandir}/man8/ssh-pkcs11-helper.8*后追加
%attr(0755,root,root) %{
    
    _libexecdir}/openssh/ssh-sk-helper
%attr(0644,root,root) %{
    
    _mandir}/man8/ssh-sk-helper.8*

5. Compile y genere rpm.

cd ~/rpmbuild/SPECS
rpmbuild -ba openssh.spec

Hay una gran cantidad de resultados. Siempre que el último sea "+ salida 0", se genera correctamente. El
archivo generado se almacena en ~/rpmbuild/RPMS.
Debido a que está compilado para x86_64, está en ~/ directorio rpmbuild/RPMS/x86_64.

/home/<user_name>/rpmbuild/RPMS/x86_64
# 如果没有编译askpass的话,不会生成 askpass包,所以实际生成的rpm包数量为4个或者6个(带askpass)
[user1@localhost x86_64]$ ll
总用量 4536
-rw-rw-r--. 1 user1 user1 602772 625 15:10 openssh-9.0p1-1.el7.centos.x86_64.rpm
-rw-rw-r--. 1 user1 user1 44312 625 15:10 openssh-askpass-9.0p1-1.el7.centos.x86_64.rpm
-rw-rw-r--. 1 user1 user1 24696 625 15:10 openssh-askpass-gnome-9.0p1-1.el7.centos.x86_64.rpm
-rw-rw-r--. 1 user1 user1 580532 625 15:10 openssh-clients-9.0p1-1.el7.centos.x86_64.rpm
-rw-rw-r--. 1 user1 user1 2958016 625 15:10 openssh-debuginfo-9.0p1-1.el7.centos.x86_64.rpm
-rw-rw-r--. 1 user1 user1 419928 625 15:10 openssh-server-9.0p1-1.el7.centos.x86_64.rpm
[user1@localhost x86_64]$

6. Instalación

Intente iniciar el servicio telnet antes de la instalación.
Además, haga una copia de seguridad de la configuración, lo cual debe hacerse.

mkdir ~/ssh_bak
mkdir ~/ssh_bak/service
# 备份PAM配置
cp /etc/pam.d/sshd ~/ssh_bak/
# 备份sshd_config
cp /etc/ssh/sshd_config ~/ssh_bak/
# 备份sshd的启动服务
cp /usr/lib/systemd/system/sshd* ~/ssh_bak/service/

Instalación mediante actualización

No se recomienda utilizar el método de desinstalación e instalación ahora, porque este método causará algunos problemas y hará que el servicio sshd no se inicie automáticamente.

1. Descomprima el paquete de instalación e ingrese al directorio donde está almacenado el rpm
2. Ejecute el comando de instalación yum:

yum -y localinstall openssh*.rpm

3. Restaurar la configuración de PAM

cp -f ~/ssh_bak/sshd /etc/pam.d/

El archivo de servicio autoempaquetado no incluye el servicio de administración systemd. Debe agregarlo usted mismo. Debido a que el paquete rpm integrado de centos contiene sshd-keygen que no existe en el paquete original, puede ocurrir un error de archivo no encontrado. Ejecútelo con precaución. Si no utiliza el servicio de administración de archivos, use chkconfig para administrar el inicio de sshd.

4. Modificar los permisos de acceso a archivos clave

#修改/etc/ssh/ssh_host_* 权限
chmod 400 /etc/ssh/ssh_host_*

5. Restaurar archivos de configuración (opcional)

Tenga en cuenta que este paso es opcional y solo se utiliza para solucionar errores o restaurar configuraciones cuando el servicio no se inicia.

cp -f ~/ssh_bak/sshd /etc/sysconfig/sshd
cp -f ~/ssh_bak/pam.d/sshd /etc/pam.d/sshd
cp -f ~/ssh_bak/service/* /usr/lib/systemd/system/sshd*

6. Modificar sshd_config

Durante la instalación se creará una nueva versión del archivo de configuración sshd_config.rpmnew. Si la configuración original no puede surtir efecto, puede consultar la nueva configuración.

vim /etc/ssh/sshd_config
## 务必保证以下几项设置都正确!否则会进不了服务器!
# 允许root登录
PermitRootLogin yes
# 允许密码登录
PasswordAuthentication yes

7. Intente reiniciar el proceso sshd.

systemctl restart sshd
# 如果是通过sshd.socket服务启动可以执行以下命令
systemctl restart sshd.socket

8. Intente establecer una nueva conexión ssh.

ssh -v localhost

Preste atención a la información de la versión remota de salida. Si no se puede establecer la conexión en este momento, debe verificar inmediatamente si la configuración anterior es correcta.

...
debug1: Local version string SSH-2.0-OpenSSH_9.0
debug1: Remote protocol version 2.0, remote software version OpenSSH_9.1
debug1: compat_banner: match: OpenSSH_9.0 pat OpenSSH* compat 0x04000000
...

El algoritmo de intercambio de claves SecureCRT7.1 no está en la lista predeterminada de OpenSSH8.3. XShell6 no tiene este problema.
El algoritmo compatible con SecureCRT7.1 debe agregarse al archivo de configuración.

sshd -T | grep kexalgorithms>> /etc/ssh/sshd_config
vi /etc/ssh/sshd_config
#或者手动在KexAlgorithms添加 diffie-hellman-group14-sha1

Contenido adicional a seguir

20210426 Complementado
durante un proceso de actualización, se descubrió que después de la actualización, se usó el comando sshd -V para verificar la versión de sshd y el resultado devuelto seguía siendo la versión anterior (Centos7.8 openssh 7.9p1 se actualizó a openssh 8.6p1 ) Después de la investigación, se encontró que el comando sshd estaba asignado a dos archivos, uno es /usr/sbin/sshd, este es el archivo de inicio predeterminado, verifique la versión, es 8.6p1, el otro está en un directorio diferente , llamar a sshd en bash usará otra versión anterior de sshd, por lo que la versión de sshd utilizada actualmente no se puede verificar mediante sshd -V. Es mejor usar el comando ssh -v root@ip para verificar. Además, es mejor eliminar la versión anterior de la ruta sshd y la ruta ssh en PATH para evitar otras operaciones erróneas innecesarias.
Suplemento 20210730:
Al actualizar Openssh, su inicio automático falló porque el archivo /etc/sysconfig/sshd no se restauró. Después de reiniciar la máquina, no se pudo iniciar el servicio sshd y no se pudo ingresar a la máquina.

Apéndice 1: Bajar de categoría

yum -y degradar openssh-server-7.4p1-21.el7 openssh-clients-7.4p1-21.el7 openssh-7.4p1-21.el7
/bin/cp -f ~/ssh_bak/sshd /etc/pam.d/
/bin/cp -f ~/ssh_bak/ssh_config /etc/ssh/
/bin/cp -f ~/ssh_bak/sshd_config /etc/ssh/

Apéndice 2: Utilice Telnet para iniciar sesión e instalar

Inicie sesión como root a través de ssh
para instalar el servicio telnet

systemctl stop firewalld
systemctl disable firewalld
yum install telnet-server
yum install xinetd
# 若不能在线安装,需要下载rpm包,不会太多,一共两三个
systemctl start telnet.socket
systemctl start xinetd
systemctl enable telnet.socket
systemctl enable xinetrd

Una vez completada la instalación, verifique que el inicio de sesión ssh sea exitoso y que aún pueda usar ssh para iniciar sesión después de reiniciar el servidor, luego:

#启动firewalld,
systemctl start firewalld
systemctl enable firewalld
#关闭telnet服务,
systemctl stop telnet.socket
systemctl stop xinetd
systemctl disable telnet.socket
systemctl disable xinetd
#卸载telnet-server,
yum erase telnet-server

Para modificar el número de puerto de Telnet, su archivo de configuración es: /usr/lib/systemd/system/telnet.socket

Apéndice 3: Otras referencias

/etc/pam.d/sshd

[root@localhost ~]# cat /etc/pam.d/sshd
#%PAM-1.0
auth required pam_sepermit.so
auth substack password-auth
auth include postlogin
# Used with polkit to reauthorize users in remote sessions
-auth optional pam_reauthorize.so prepare
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 required pam_namespace.so
session optional pam_keyinit.so force revoke
session include password-auth
session include postlogin
# Used with polkit to reauthorize users in remote sessions
-session optional pam_reauthorize.so prepare

/usr/lib/systemd/system/sshd-keygen.servicio

[Unit]
Description=OpenSSH Server Key Generation
ConditionFileNotEmpty=|!/etc/ssh/ssh_host_rsa_key
ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ecdsa_key
ConditionFileNotEmpty=|!/etc/ssh/ssh_host_ed25519_key
PartOf=sshd.service sshd.socket

[Service]
ExecStart=/usr/sbin/sshd-keygen
Type=oneshot
RemainAfterExit=yes

/usr/lib/systemd/system/sshd.servicio

[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/[email protected]

[Unit]
Description=OpenSSH per-connection server daemon
Documentation=man:sshd(8) man:sshd_config(5)
Wants=sshd-keygen.service
After=sshd-keygen.service

[Service]
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=-/usr/sbin/sshd -i $OPTIONS
StandardInput=socket

/usr/lib/systemd/system/sshd.socket

[Unit]
Description=OpenSSH Server Socket
Documentation=man:sshd(8) man:sshd_config(5)
Conflicts=sshd.service

[Socket]
ListenStream=22
Accept=yes

[Install]
WantedBy=sockets.target

lib/systemd/system/sshd.servicio

[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target                      

/lib/systemd/system/sshd.socket

[Unit]
Description=OpenSSH Server Socket
Documentation=man:sshd(8) man:sshd_config(5)
Conflicts=sshd.service

[Socket]
ListenStream=22
Accept=yes

[Install]
WantedBy=sockets.target

Supongo que te gusta

Origin blog.csdn.net/weixin_42602433/article/details/129798862
Recomendado
Clasificación