Centos 7 faz atualização do pacote openssh rpm

Se você deseja operar no ambiente de produção, leia todo o documento.
Ambiente experimental: sistema offline Centos7.6.
A compilação do openssh 9.1p1 foi concluída com sucesso.

1. Prepare o pacote de código-fonte openssh

Comece no diretório inicial e defina o diretório de trabalho

cd ~

Baixe o pacote fonte do openssh em openssh.com

Você pode primeiro tentar ver se o seu navegador consegue clicar no link abaixo para evitar que o servidor não obtenha o endereço correspondente.

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

#Baixe o pacote de código-fonte do plug-in de diálogo de senha x11-ssh-askpass x11, opcional. Se você não precisa de x11-ssh-askpass, você pode pular o pacote de código-fonte modificando o arquivo de especificações.

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

Verifique a assinatura do arquivo, 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 o ambiente rpm-build e compilação

Instale o pacote rpm-build e outros pacotes necessários para compilação

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

Adicionar suporte a askpass requer adicionar o pacote de dependência de instalação libxXt-devel imake gtk2-devel

yum install libXt-devel imake gtk2-devel

Crie o diretório de trabalho rpm-build, SOURCES para colocar o pacote de código fonte, SPECS para colocar o arquivo de configuração

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

Instruções complementares, diretório em rpmbuild

  • BUILD diretório temporário para compilar pacotes rpm
  • BUILDROOT O diretório de instalação temporário do software gerado após a compilação
  • O diretório onde o pacote rpm instalável finalmente gerado pelo RPMS está localizado
  • FONTES Diretório onde todos os códigos-fonte e arquivos de patch são armazenados
  • Diretório SPECS onde os arquivos SPEC são armazenados (importante)
  • O caminho final de armazenamento do formato de código-fonte rpm do software SRPMS.
    Copie o pacote de código-fonte para o diretório de trabalho rpmbuild.
cp ~/openssh-9.0p1.tar.gz ~/rpmbuild/SOURCES 

Adicione suporte askpass, se necessário

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

3. Extraia o arquivo de especificações

Extraia o arquivo de especificações do pacote fonte [ o arquivo de especificações necessário é extraído do pacote 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 o arquivo de especificações

Se você não precisa do askpass, você pode pular o pacote de código-fonte x11-ssh-askpass modificando os parâmetros do arquivo de especificações. Existem 3 lugares que precisam ser comentados.

# 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

Resolva o erro openssl-devel<1.1.
Este erro também existe na versão 9.1p1. Ele precisa ser comentado manualmente.
Comente os seguintes itens de configuração
#BuildRequires: openssl-devel < 1.1

Se a compilação falhar, a seguinte
mensagem de erro será exibida: Um arquivo instalado (mas descompactado) foi encontrado:
/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

A verificação descobriu que o arquivo de especificações integrado foi atualizado pela última vez em 2018, o ssh-sk-helper foi adicionado em dezembro de 2019 e o arquivo de especificações não está incluído em %file. Modifique o arquivo de especificações
.

在%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. Compilar e gerar rpm

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

Há muita saída. Contanto que a última seja "+ exit 0", ela será gerada com sucesso. O
arquivo gerado é armazenado em ~/rpmbuild/RPMS.
Por ser compilado para x86_64, está no ~/ diretório 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. Instalação

Por favor, tente iniciar o serviço telnet antes da instalação.
Além disso, faça backup da configuração, o que deve ser feito!

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/

Instalação via atualização

Não é recomendado usar o método de desinstalação e instalação agora, pois este método causará alguns problemas e fará com que o serviço sshd não seja iniciado automaticamente.

1. Descompacte o pacote de instalação e digite o diretório onde o rpm está armazenado.
2. Execute o comando de instalação yum:

yum -y localinstall openssh*.rpm

3. Restaure as configurações do PAM

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

O arquivo de serviço auto-empacotado não inclui o serviço de gerenciamento systemd. Você mesmo precisa adicioná-lo. Como o pacote rpm integrado do centos contém sshd-keygen que não existe no pacote original, pode ocorrer um erro de arquivo não encontrado. Por favor, execute com cuidado. Se você não usa o gerenciamento de arquivos de serviço Use chkconfig para gerenciar a inicialização do sshd.

4. Modifique as permissões de acesso aos arquivos principais

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

5. Restaurar arquivos de configuração (opcional)

Observe que esta etapa é opcional e só é usada para solucionar erros ou restaurar configurações quando o serviço falha ao iniciar!

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

Uma nova versão do arquivo de configuração sshd_config.rpmnew será criada durante a instalação. Se a configuração original não puder entrar em vigor, você poderá consultar a nova configuração.

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

7. Tente reiniciar o processo sshd

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

8. Tente estabelecer uma nova conexão ssh

ssh -v localhost

Preste atenção às informações da versão remota de saída. Se a conexão não puder ser feita neste momento, você precisará verificar imediatamente se as configurações acima estão corretas.

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

O algoritmo de troca de chaves SecureCRT7.1 não está na lista padrão do OpenSSH8.3. O XShell6 não tem esse problema.
O algoritmo suportado pelo SecureCRT7.1 precisa ser adicionado ao arquivo de configuração.

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

Conteúdo adicional a seguir

20210426 Complementado
durante um processo de atualização, descobriu-se que após a atualização, o comando sshd -V foi usado para verificar a versão sshd, e o resultado retornado ainda era a versão anterior (Centos7.8 openssh 7.9p1 foi atualizado para openssh 8.6p1 ). Após pesquisa, descobriu-se que o comando sshd foi mapeado para dois arquivos, um é /usr/sbin/sshd, este é o arquivo de inicialização padrão, verifique a versão, é 8.6p1, o outro está em um diretório diferente , chamar sshd no bash usará outra versão antiga do sshd, portanto, a versão sshd usada atualmente não pode ser verificada por meio de sshd -V. É melhor usar o comando ssh -v root@ip para verificar. Além disso, é melhor excluir a versão antiga do caminho sshd e do caminho ssh em PATH para evitar outras operações erradas desnecessárias.
Suplemento 20210730:
Ao atualizar o Openssh, sua inicialização automática falhou porque o arquivo /etc/sysconfig/sshd não foi restaurado.Depois que a máquina foi reiniciada, o serviço sshd não pôde ser iniciado e a máquina não pôde ser acessada.

Apêndice 1: Downgrade

yum -y downgrade 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: Use Telnet para fazer login e instalar

Faça login como root via ssh
para instalar o serviço 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

Após a conclusão da instalação, verifique se o login do ssh foi bem-sucedido e se você ainda pode usar o ssh para efetuar login após o servidor ser reiniciado e, em seguida:

#启动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 o número da porta do Telnet, seu arquivo de configuração é: /usr/lib/systemd/system/telnet.socket

Apêndice 3: Outras referências

/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

Acho que você gosta

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