Aqui está como você converte o dropbear chave. Os scripts de inicialização são um pouco instáveis para mim também ...
Estou tentando desbloquear um servidor sem cabeçalho executando uma versão criptografada do Ubuntu 14.04. É uma instalação limpa 14.04.2 com todas as atualizações como por escrito.
Eu passei pelas travessuras padrão com dropbear
e busybox
, ou seja:
# INSTALL
sudo apt-get install dropbear busybox # on server
# ENABLE AND CONFIGURE IP
sudo sed -i 's/NO_START=1/NO_START=0/g' /etc/default/dropber
sudo sed -i 's/BUSYBOX=y/BUSYBOX=y\nDROPBEAR=y\n/g' \
/etc/iniramfs/iniramfs.conf
sudo sed -i 's/DEVICE=.+/DEVICE=etho0/g' \
/etc/iniramfs/initramfs.conf
sudo sed -i 's/IP=.+/IP=IP=192.168.0.11:::255.255.255.0::eth1:off' \
/etc/initramfs/initramfs.conf
sudo update-initramfs
# COPY DROPBEAR SSH KEY
# WRONG: sudo cp /etc/dropbear/dropbear_*_host_key /tmp
sudo cp /etc/initramfs-tools/root/.ssh/id_rsa /tmp # BETTER!
sudo chown $USER:$USER /tmp/id_rsa
scp server:/tmp/id_rsa ~/.ssh/id_rsa_dropbear_server # on client
sudo reboot # on server
# CONNECT TO SERVER
ssh -vv -i ~/.ssh/id_rsa_dropbear_server \
-o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' \
[email protected] # on client
Então eu copiei a chave ssh gerada automaticamente e fiz uma configuração mínima de dropbear. Para minha surpresa duas três coisas estão com defeito:
192.168.0.27
apesar da minha configuração. Então eu tentei o IP errado listado com: ssh -vv -i ~/.ssh/dropbear_dss_host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' [email protected]
. Isso se conecta ao dropbear, mas: /etc/initramfs-tools/root/.ssh/authorized_keys
(testado com dss - talvez também rsa). Aqui está toda a sessão ssh .
Eu adicionei meu arquivo de chave pública usual aos hosts conhecidos do dropbear no /etc/initramfs-tools/root/.ssh/authorized_keys
do servidor e tentei usar a minha chave usual. Isso não funcionou.
Eu adicionei a linha GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"
ao /etc/default/grup
e ao grup atualizado do servidor. Isso foi feito para corrigir o problema de IP. Mas isso não funcionou também.
Agora estou completamente irritado e no final da minha paciência. Onde foi que eu errei? Além disso, a sintaxe das configurações de IP está correta porque um guia diz ::eth0:off
e o próximo diz ::etho:none
?
Existe alguém com o que parece ser o mesmo problema em 15.04.
Agora posso me conectar ao servidor. Acontece que eu tinha copiado a chave privada errada para usar com dropbear. O erro foi corrigido no meu script acima. Mas a adição de chaves ainda não funciona (por exemplo, para o arquivo authorized_keys
do dropbear). Há palavras que você precisa para converter as chaves públicas, que você deseja adicionar ao /etc/initramfs-tools/root/.ssh/authorized_keys
para o formato dropbear, mas eu não quero perder tempo pesquisando como. Eu só tentei dss
chaves públicas. Talvez o dropbear goste apenas de rsa
better?
Também notei que os scripts de gancho personalizados parecem não funcionar. Eles não estão incluídos nos diretórios do initramfs, mas lsinitramfs -l /boot/initrd.img-3.16.0-43-generic
os lista como parte da imagem. As configurações de IP ainda são ignoradas também. Mesmo se eu adicionar GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"
ao grubconfig em /etc/default/grub
e atualizar tudo.
Portanto, parece que /usr/lib/dropbear/dropbearconvert INPUTFORMAT OUTPUTFORMAT INFILE OUTFILE
é o programa para converter chaves. O parâmetro FORMAT pode ser openssh
ou dropbear
. Mas não parece que essa seja a resposta sobre como adicionar chaves aos servidores /etc/initramfs-tools/root/.ssh/authorized_keys
. A chave existente já está no formato de arquivo de chave pública do openssh. Portanto, adicionar outras chaves no formato openssh não deve ser um problema. Ainda é.
Aqui está como você converte o dropbear chave. Os scripts de inicialização são um pouco instáveis para mim também ...
Não está claro quais known_hosts estão incomodando você - no servidor ou no cliente. Eu usei as instruções em link no Debian. Vou parafrasear essa página e adicionar alguns ajustes que achei úteis. Os pacotes de caixas de depósito Debian contemporâneos criam todas as chaves necessárias no servidor no momento da instalação, mas o tutorial de referência é tão antigo que menciona casos em que as chaves precisam ser criadas manualmente. YMMV.
No servidor. Como você mencionou corretamente, dropbear e OpenSSH são diferentes, mas supostamente são conversíveis. O tutorial diz que você poderia criar no servidor as chaves do host com:
dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key
Na verdade, é um pouco mais difícil do que isso. Para mim no Debian Jessie, os passos foram:
Crie uma chave OpenSSH.
ssh-keygen -t rsa -b 4096-f bootkey_rsa
Converta para o formato dropbear:
/usr/lib/dearbear/dearbearconvert openssh dropbear bootkey_rsa bootkey_dropbear_rsa
Extraia sua parte pública para o local onde o dropbear de boot pode usá-la:
dropbearkey -y -f asusboot_rsa | grep "^ ssh-rsa" > / etc / dropbear-initramfs / authorized_keys
Atualize o initramfs:
update-initramfs -u -k todos
Observe que o local em que o known_hosts é esperado por update-initramfs, fornecido acima como /etc/dropbear-initramfs/authorized_keys
, é flexível e provavelmente muda de distro para distro. Para ter certeza de que você o colocou no lugar certo, leia o arquivo de origem em /usr/share/initramfs-tools/hooks/dropbear
.
A outra chave necessária é criada com:
dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
No cliente, você precisa dos dois tipos de chaves, portanto, há outro known_hosts
. No tutorial referenciado, o comando para conectar é:
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" [email protected] \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"
Uma das chaves, id_rsa.initramfs
, é o arquivo /etc/initramfs-tools/etc/dropbear/dropbear_rsa_host_key
ou bootkey_rsa
da seção do servidor.
No cliente known_hosts
, pode haver um conflito entre a chave que você já tem para o servidor OpenSSH e o servidor dropbear que você acabou de instalar. Eu removi temporariamente de known_hosts
as chaves para o serviço OpenSSH regular, conectado usando o comando acima (deixando de fora o parâmetro -o
), fui perguntado se eu confio na chave do host, disse sim, e fui anexado ao meu% código%. A partir daí, você precisa mover a última linha para seus próprios known_hosts ( known hosts
no exemplo acima).
apt-get install dropbear initramfs-tools busybox
Basta copiar e colar suas chaves públicas em /etc/dropbear-initramfs/authorized_keys
no SERVER
Crie o seguinte script em /etc/initramfs-tools/hooks/crypt_unlock.sh
#!/bin/sh
PREREQ="dropbear"
prereqs() {
echo "$PREREQ"
}
case "$1" in
prereqs)
prereqs
exit 0
;;
esac
. "${CONFDIR}/initramfs.conf"
. /usr/share/initramfs-tools/hook-functions
if [ "${DROPBEAR}" != "n" ] && [ -r "/etc/crypttab" ] ; then
cat > "${DESTDIR}/bin/unlock" << EOF
#!/bin/sh
if PATH=/lib/unlock:/bin:/sbin /scripts/local-top/cryptroot; then
kill \'ps | grep cryptroot | grep -v "grep" | awk '{print \}'\'
# following line kill the remote shell right after the passphrase has
# been entered.
kill -9 \'ps | grep "\-sh" | grep -v "grep" | awk '{print \}'\'
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd
fi
Torne-o executável:
chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
Edite /etc/initramfs-tools/initramfs.conf
para adicionar (ou alterar) a linha:
IP=192.168.1.254::192.168.1.1:255.255.255.0::eth0:off
format [host ip]::[gateway ip]:[netmask]:[hostname]:[device]:[autoconf]
([hostname] can be omitted)
update-initramfs -u
sudo update-rc.d dropbear disable
ssh [email protected] [-i ~/.ssh/id_rsa]