Centos 7 effectue la mise à niveau du package openssh rpm

Si vous souhaitez opérer dans un environnement de production, assurez-vous de lire l'intégralité du document.
Environnement expérimental : système hors ligne Centos7.6.
La compilation d'opensh 9.1p1 a été terminée avec succès.

1. Préparer le package de code source openssh

Commencez dans le répertoire personnel et définissez le répertoire de travail

cd ~

Téléchargez le package source openssh depuis openssh.com

Vous pouvez d'abord essayer de voir si votre navigateur peut cliquer sur le lien ci-dessous pour éviter que le serveur n'obtienne pas l'adresse correspondante.

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

#Téléchargez le package de code source du plug-in de boîte de dialogue de mot de passe x11-ssh-askpass x11, facultatif. Si vous n'avez pas besoin de x11-ssh-askpass, vous pouvez ignorer le package de code source en modifiant le fichier de spécifications.

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

Vérifier la signature du fichier, facultatif

# 从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. Installez l'environnement de construction et de compilation RPM

Installez le package rpm-build et les autres packages requis pour la compilation

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

L'ajout de la prise en charge d'Askpass nécessite l'ajout du package de dépendances d'installation libxXt-devel imake gtk2-devel

yum install libXt-devel imake gtk2-devel

Créez le répertoire de travail rpm-build, SOURCES pour placer le package de code source, SPECS pour placer le fichier de configuration

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

Instructions supplémentaires, répertoire sous rpmbuild

  • CONSTRUIRE un répertoire temporaire pour compiler les packages RPM
  • BUILDROOT Le répertoire d'installation temporaire du logiciel généré après compilation
  • Le répertoire où se trouve le package rpm installable finalement généré par RPMS
  • SOURCES Répertoire où sont stockés tous les codes sources et les fichiers de correctifs
  • Répertoire SPECS où sont stockés les fichiers SPEC (important)
  • Le chemin de stockage final du format de code source rpm du logiciel SRPMS.
    Copiez le package de code source dans le répertoire de travail rpmbuild.
cp ~/openssh-9.0p1.tar.gz ~/rpmbuild/SOURCES 

Ajoutez la prise en charge d'Askpass si nécessaire

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

3. Extraire le fichier de spécifications

Extrayez le fichier de spécifications du package source [ le fichier de spécifications requis est extrait du package 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. Modifier le fichier de spécifications

Si vous n'avez pas besoin d'askpass, vous pouvez ignorer le package de code source x11-ssh-askpass en modifiant les paramètres du fichier de spécifications. Il y a 3 endroits qui doivent être commentés.

# 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

Résolvez l'erreur openssl-devel <1.1.
Cette erreur existe également dans la version 9.1p1. Elle doit être commentée manuellement.
Commentez les éléments de configuration suivants
#BuildRequires : openssl-devel < 1.1

Si la compilation échoue, le
message d'erreur suivant apparaît : Un fichier installé (mais non packagé) a été trouvé :
/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 vérification a révélé que le fichier de spécifications intégré a été mis à jour pour la dernière fois en 2018, que ssh-sk-helper a été ajouté en décembre 2019 et que le fichier de spécifications n'est pas inclus dans %file. Modifiez le fichier de spécifications
.

在%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. Compiler et générer des RPM

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

Il y a beaucoup de résultats. Tant que le dernier est "+ exit 0", il est généré avec succès. Le
fichier généré est stocké dans ~/rpmbuild/RPMS.
Comme il est compilé pour x86_64, il se trouve dans ~/ répertoire 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.Installation

Veuillez essayer de démarrer le service telnet avant l'installation.
Sauvegardez également la configuration, ce qui doit être fait !

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/

Installation via mise à niveau

Il n'est pas recommandé d'utiliser la méthode de désinstallation et d'installation maintenant, car cette méthode entraînera des problèmes et empêchera le service sshd de démarrer automatiquement.

1. Décompressez le package d'installation et entrez dans le répertoire où le RPM est stocké.
2. Exécutez la commande d'installation yum :

yum -y localinstall openssh*.rpm

3. Restaurer les paramètres PAM

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

Le fichier de service auto-packagé n'inclut pas le service de gestion systemd. Vous devez l'ajouter vous-même. Étant donné que le package rpm intégré centos contient sshd-keygen qui n'existe pas dans le package d'origine, une erreur de fichier introuvable peut se produire. Veuillez exécuter avec prudence. Si vous n'utilisez pas la gestion des fichiers de service, utilisez chkconfig pour gérer le démarrage de sshd.

4. Modifier les autorisations d'accès aux fichiers clés

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

5. Restaurer les fichiers de configuration (facultatif)

Notez que cette étape est facultative et n'est utilisée que pour résoudre les erreurs ou restaurer les configurations lorsque le service ne démarre pas !

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. Modifier sshd_config

Une nouvelle version du fichier de configuration sshd_config.rpmnew sera créée lors de l'installation. Si la configuration d'origine ne peut pas prendre effet, vous pouvez vous référer à la nouvelle configuration.

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

7. Essayez de redémarrer le processus sshd

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

8. Essayez d'établir une nouvelle connexion ssh

ssh -v localhost

Faites attention aux informations de version distante de sortie. Si la connexion ne peut pas être établie à ce moment, vous devez immédiatement vérifier si les paramètres ci-dessus sont corrects.

...
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
...

L'algorithme d'échange de clés SecureCRT7.1 ne figure pas dans la liste par défaut d'OpenSSH8.3. XSShell6 n'a pas ce problème.
L'algorithme pris en charge par SecureCRT7.1 doit être ajouté au fichier de configuration.

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

Contenu supplémentaire à suivre

20210426 Complété
lors d'un processus de mise à niveau, il a été constaté qu'après la mise à niveau, la commande sshd -V était utilisée pour vérifier la version de sshd et que le résultat renvoyé était toujours la version précédente (Centos7.8 openssh 7.9p1 a été mis à niveau vers openssh 8.6p1 ). Après recherche, il a été constaté que la commande sshd était mappée sur Deux fichiers, l'un est /usr/sbin/sshd, c'est le fichier de démarrage par défaut, vérifiez la version, c'est 8.6p1, l'autre est dans un répertoire différent , appeler sshd dans bash utilisera une autre ancienne version de sshd, donc la version de sshd actuellement utilisée ne peut pas être vérifiée via sshd -V. Il est préférable d'utiliser la commande ssh -v root@ip pour vérifier. De plus, il est préférable de supprimer l'ancienne version du chemin sshd et du chemin ssh dans PATH pour éviter d'autres opérations erronées inutiles.
Supplément 20210730 :
lors de la mise à niveau d'Openssh, son démarrage automatique a échoué car le fichier /etc/sysconfig/sshd n'a pas été restauré. Après le redémarrage de la machine, le service sshd n'a pas pu être démarré et la machine n'a pas pu être saisie.

Annexe 1 : Déclassement

miam -y rétrograder 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/

Annexe 2 : Utiliser Telnet pour vous connecter et installer

Connectez-vous en tant que root via ssh
pour installer le service 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

Une fois l'installation terminée, vérifiez que la connexion SSH a réussi et que vous pouvez toujours utiliser SSH pour vous connecter après le redémarrage du serveur, puis :

#启动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

Pour modifier le numéro de port de Telnet, son fichier de configuration est : /usr/lib/systemd/system/telnet.socket

Annexe 3 : Autres références

/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.service

[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.service

[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.service

[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

Je suppose que tu aimes

Origine blog.csdn.net/weixin_42602433/article/details/129798862
conseillé
Classement