
Todo sistema é um compromisso entre segurança e usabilidade.
No NAS construído , havia um problema sério: era impossível reiniciar o sistema sem estar no local, o que reduzia o nível de disponibilidade de dados.
Esse problema não foi crítico até o momento em que começaram a desligar a emergência de eletricidade: por três meses, duas vezes por várias horas. O no-break foi projetado para avarias de curto prazo e não deve funcionar com baterias por mais de meia hora (embora realmente seja cerca de uma hora), e com cada desligamento desse tipo, para ligar o sistema novamente, tive que ir para outra cidade.
Graças a uma dica do ValdikSS , esse problema foi resolvido. Mas ...

Eu precisava de ligação de interface e desbloqueio remoto de SSH. E não encontrei um manual que possa ser feito imediatamente, para que funcione conforme necessário.
Portanto, trago minha versão da solução com vínculo e IP dinâmico, no qual o sistema pode ser desbloqueado, local e remotamente.
Lembro que, para executar essas configurações, você deve ter acesso físico local ao NAS e aos recursos de inicialização de backup.
Colagem na initramfs
Como no NAS, duas interfaces são combinadas em um canal, foi decidido fazer isso também na inicialização.
Da pergunta "Usando o NFS-root com interfaces vinculadas" , peguei o script. O artigo "Como gerenciar ligações linux sem ifenslave usando sysfs" ajudou a configurar as ligações.
Primeiro, você precisa incluir módulos no initramfs que são usados para operar a rede. Isso é feito com o seguinte comando:
while read m _; do /sbin/modinfo -F filename "$m"; done </proc/modules | sed -nr "s@^/lib/modules/`uname -r`/kernel/drivers/net(/.*)?/([^/]+)\.ko\$@\2@p" >> /etc/initramfs-tools/modules
Agora copie os dois scripts para /etc/initramfs-tools/scripts/
.
O primeiro é necessário para elevar as interfaces na ligação:
/ etc / initramfs-tools / scripts / init-premount / 00_bonding_init O segundo é desativar a interface de ligação enquanto o carregamento continua:
/ etc / initramfs-tools / scripts / init-bottom / iface_down Se isso não for feito, a rede não funcionará após a inicialização.
Não esqueça de dar permissão aos scripts para executar:
chmod +x /etc/initramfs-tools/scripts/init-premount/00_bonding_init /etc/initramfs-tools/scripts/init-bottom/iface_down
Resta apenas definir as interfaces que serão incluídas na ligação e os parâmetros para obter o endereço.
O endereço será obtido via DHCP, porque A ligação terá o mesmo MAC que após a inicialização, porque o roteador emitirá um IP fixo e encaminhará as portas.
Recebo automaticamente as interfaces daquelas incluídas no vínculo bond0
enquanto o NAS está em execução:
sed -i "s/\(GRUB_CMDLINE_LINUX_DEFAULT=\)\"\(.*\)\"/\1\"\2 $(echo -n ip=:::::bond0:dhcp bondslaves=$(sed -e 's/ /,/' /sys/class/net/bond0/bonding/slaves))\"/" /etc/default/grub
Por fim, atualize a configuração do GRUB e a imagem initramfs:
update-grub update-initramfs -u -k $(uname -r)
Isso é tudo. Se tudo estiver configurado corretamente, após a reinicialização e o início do script de inicialização no initrmafs, os pings no IP NAS continuarão, apesar do fato de o sistema operacional ainda não estar carregado.
Observo que a criação de vínculos no Dracut é muito mais fácil, porque já existem scripts na entrega .
Servidor SSH no initramfs
Instale o pacote para ativar o Dropbear SSH no initramfs:
apt-get install dropbear-initramfs
O Dropbear SSH será incluído no initrmafs automaticamente e será iniciado se pelo menos uma interface de rede com um endereço IP for levantada no estágio inicial da inicialização.
Depois disso, converta a chave Dropbear para o formato OpenSSH e feche-a com uma senha:
/usr/lib/dropbear/dropbearconvert dropbear openssh \ /etc/dropbear/dropbear_rsa_host_key \ id_rsa dropbearkey -y -f /etc/dropbear/dropbear_rsa_host_key | \ grep "^ssh-rsa " > id_rsa.pub ssh-keygen -p -f id_rsa
A chave id_rsa
é id_rsa
para a máquina com a qual o desbloqueio será realizado. Assumirei que ele será copiado para o ~/.ssh/dropbear
.
Em /etc/dropbear-initramfs/authorized_keys
, as impressões digitais das chaves e os parâmetros de cada chave devem ser especificados.
Por enquanto, basta adicionar a impressão digital de uma chave, para a qual você precisa executar o seguinte comando:
echo 'no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/unlock"' $(cat id_rsa.pub) >> /etc/dropbear-initramfs/authorized_keys
Nenhum wrapper mencionado nos artigos é necessário, /bin/unlock
- script do sistema (cryptroot-unlock).
É assim que o /etc/dropbear-initramfs/authorized_keys
deve aparecer no final:
no-port-forwarding,no-agent-forwarding,no-X11-forwarding,command="/bin/unlock" ssh-rsa AAAA...XDa root@nas
Atualize a imagem de configuração e initramfs do GRUB e reinicie:
update-grub update-initramfs -u -k $(uname -r) reboot
Na máquina em que você copiou a chave, agora é possível conectar-se ao NAS e desbloquear:
$ ssh -i .ssh/dropbear/id_rsa_initram -o UserKnownHostsFile=.ssh/dropbear/known_hosts root@nas.NAS.cloudns.cc Enter passphrase for key '.ssh/dropbear/id_rsa_initram': X11 forwarding request failed on channel 0 Please unlock disk root_crypt1 (/dev/disk/by-id/ata-Samsung_SSD_850_PRO_256GB-part3):
Depois disso, o console constantemente recebe um erro sobre a ausência de um argumento ( ash: -gt: argument expected
), mas o desbloqueio será realizado. Este é um erro no script de desbloqueio do sistema que não afeta nada (o erro é corrigido facilmente, mas os wrappers não o curam).
Mais detalhes podem ser encontrados nestes artigos:
Depuração
Para depuração, você pode inserir uma chamada para /bin/sh
no script 00_bonding_init
após:
case $1 in prereqs) echo "${PREREQS}"; exit 0;; esac
Quando os problemas de ligação forem resolvidos, substitua o command="/bin/unlock"
pelo command="/bin/sh"
nas command="/bin/sh"
authorized_keys
.
Após a conexão via SSH, você verá um shell que pode ser usado para depuração.