J'essaie de déverrouiller un serveur sans tête exécutant une version chiffrée d'Ubuntu 14.04. C'est une installation propre de 14.04.2 avec toutes les mises à jour au moment de l'écriture.
Je suis passé par les manigances standard avec dropbear
et busybox
, c'est-à-dire:
# 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
J'ai donc copié la clé ssh générée automatiquement et fait une configuration minimale de dropbear. À ma surprise deux trois choses fonctionnent mal:
192.168.0.27
malgré ma configuration. J'ai donc essayé la mauvaise adresse IP indiquée avec: ssh -vv -i ~/.ssh/dropbear_dss_Host_key -o 'UserKnownHostsFile=~/.ssh/known_hosts.initramfs' [email protected]
. Cela se connecte à dropbear mais:/etc/initramfs-tools/root/.ssh/authorized_keys
(testé avec dss - peut-être aussi rsa).Voici l'ensemble session ssh .
J'ai ajouté mon fichier de clé publique habituel aux hôtes connus de dropbear dans le /etc/initramfs-tools/root/.ssh/authorized_keys
du serveur et j'ai essayé de ssh avec ma clé habituelle. Ça n'a pas marché.
J'ai ajouté la ligne GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"
au /etc/default/grup
du serveur et au groupe mis à jour. Cela visait à résoudre le problème de la propriété intellectuelle. Mais cela n'a pas fonctionné non plus.
Je suis maintenant complètement ennuyé et à bout de patience. Où me suis-je trompé? De plus, la syntaxe des paramètres IP est-elle correcte, car un guide indique ::eth0:off
et le suivant indique ::etho:none
?
Il y a quelqu'un avec ce qui semble être le même problème le 15.04.
Je peux maintenant me connecter au serveur. Il s'avère que j'avais copié la mauvaise clé privée à utiliser avec dropbear. L'erreur a été corrigée dans mon script ci-dessus. Mais l’ajout de clés ne fonctionne toujours pas (c’est-à-dire dans le fichier authorized_keys
de dropbear). Il y a Word dont vous avez besoin pour convertir les clés publiques, que vous voulez ajouter au format /etc/initramfs-tools/root/.ssh/authorized_keys
au format dropbear, mais je ne veux pas perdre de temps à chercher comment. J'ai seulement essayé dss
clés publiques. Peut-être que dropbear aime juste rsa
mieux?
De plus, j'ai remarqué que les scripts de hook personnalisés ne semblent pas fonctionner. Ils ne sont pas inclus dans les répertoires initramfs, mais lsinitramfs -l /boot/initrd.img-3.16.0-43-generic
les répertorie comme faisant partie de l'image. Les paramètres IP sont également ignorés. Même si j'ajoute GRUB_CMDLINE_LINUX_DEFAULT="ip=192.168.0.11::192.168.0.1:255.255.255.0::eth0:none"
au grubconfig dans /etc/default/grub
et que je met à jour tout.
Donc, il semble que /usr/lib/dropbear/dropbearconvert INPUTFORMAT OUTPUTFORMAT INFILE OUTFILE
est le programme pour convertir les clés. Le paramètre FORMAT peut être soit openssh
ou dropbear
. Mais il ne semble pas que ce soit la solution pour ajouter des clés aux serveurs /etc/initramfs-tools/root/.ssh/authorized_keys
. La clé existante existe déjà dans le format de fichier de clé publique d'Openshsh. Donc, ajouter d'autres clés au format openssh ne devrait pas poser de problème. Pourtant c'est.
Il est difficile de savoir quels hôtes connus vous inquiète - sur le serveur ou sur le client. J'ai utilisé les instructions de http://blog.neutrino.es/2011/unlocking-a-luks-encrypted-root-partition-remotely-via-ssh/ sur Debian. Je vais paraphraser cette page et ajouter un peu de Tweak que j'ai trouvé utile. Les paquets dropbox contemporains de Debian créent toutes les clés nécessaires sur le serveur au moment de l’installation, mais le tutoriel référencé est si ancien qu’il mentionne les cas où les clés doivent être créées manuellement. YMMV.
A. Sur le serveur. Comme vous l'avez dit à juste titre, les clés dropbear et OpenSSH diffèrent, mais sont supposément inter-convertibles. Le didacticiel indique que vous pouvez créer sur le serveur les clés d’hôte avec:
dropbearkey -t rsa -f /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key
En fait, c'est un peu plus dur que ça. Pour moi sur Debian Jessie, les étapes étaient les suivantes:
Créez une clé OpenSSH.
ssh-keygen -t rsa -b 4096 -m PEM -f bootkey_rsa
Copiez-le sur le serveur, c’est-à-dire l’ordinateur sur lequel vous êtes le plus susceptible d’avoir dropbearconvert. Là, convertissez-le au format dropbear:
/ usr/lib/dropbear/dropbearconvert openssh dropbear bootkey_rsa bootkey_dropbear_rsa
Restez sur le serveur, connectez-vous à la racine et extrayez de la clé Dropbear la partie publique dans le fichier où boot drop recherche:
dropbearkey -y -f bootkey_dropbear_rsa | grep "^ ssh-rsa">/etc/dropbear-initramfs/allowed_keys
Mettre à jour initramfs:
update-initramfs -u -k all
Nettoyage: supprimez bootkey_dropbear_rsa et bootkey_rsa du serveur.
Notez que l'emplacement où l'attribut known_hosts est attendu par update-initramfs, indiqué ci-dessus sous la forme /etc/dropbear-initramfs/authorized_keys
, est flexible et qu'il passe probablement de distro à distro. Pour être sûr de le placer au bon endroit, lisez le fichier source à partir de /usr/share/initramfs-tools/hooks/dropbear
.
L'autre clé nécessaire est créée avec:
dropbearkey -t rsa -f /etc/initramfs-tools/root/.ssh/id_rsa.dropbear
B. Sur le client, vous avez besoin des deux types de clé. Il existe donc un autre known_hosts
. Dans le tutoriel référencé, la commande à connecter est la suivante:
ssh -o "UserKnownHostsFile=~/.ssh/known_hosts.initramfs" \
-i "~/id_rsa.initramfs" [email protected] \
"echo -ne \"MyS3cr3tK3y\" >/lib/cryptsetup/passfifo"
Une des clés, id_rsa.initramfs
, est le fichier /etc/initramfs-tools/etc/dropbear/dropbear_rsa_Host_key
ou bootkey_rsa
de la section serveur.
Sur le client known_hosts
, il peut exister un conflit entre la clé que vous avez déjà pour le serveur OpenSSH et le serveur dropbear que vous venez d'installer. J'ai temporairement supprimé de known_hosts
les clés du service OpenSSH normal, connecté à l'aide de la commande ci-dessus (en laissant de côté le paramètre -o
), j'ai été invité à indiquer si je fais confiance à la clé de l'hôte, à dit oui, et je l'ai ajouté à mon known hosts
. A partir de là, vous devez déplacer cette dernière ligne vers son propre known_hosts (~/.ssh/known_hosts.initramfs
dans l'exemple ci-dessus).
Voici comment vous convertissez la clé de Dropbear. Les scripts de démarrage sont un peu débiles pour moi aussi ...
apt-get install dropbear initramfs-tools busybox
Il suffit de copier et coller votre clé publique dans /etc/dropbear-initramfs/authorized_keys
sur SERVER
Créez le script suivant dans /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 \$1}'\`
# following line kill the remote Shell right after the passphrase has
# been entered.
kill -9 \`ps | grep "\-sh" | grep -v "grep" | awk '{print \$1}'\`
exit 0
fi
exit 1
EOF
chmod 755 "${DESTDIR}/bin/unlock"
mkdir -p "${DESTDIR}/lib/unlock"
cat > "${DESTDIR}/lib/unlock/plymouth" << EOF
#!/bin/sh
[ "\$1" == "--ping" ] && exit 1
/bin/plymouth "\$@"
EOF
chmod 755 "${DESTDIR}/lib/unlock/plymouth"
echo To unlock root-partition run "unlock" >> ${DESTDIR}/etc/motd
fi
Rendez-le exécutable:
chmod +x /etc/initramfs-tools/hooks/crypt_unlock.sh
Editez /etc/initramfs-tools/initramfs.conf
pour ajouter (ou changer) la ligne:
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]
Très bien tout le monde, donc juste au cas où vous ne trouviez pas de solution et pour tous ceux qui se coupent les cheveux en suivant des tutoriels en ligne pour le mettre en place ...
Tous les tutoriels que j'ai trouvés en ligne disent/impliquent que le fichier
authorized_keys
va dans
/etc/initramfs-tools/root/.ssh/
quand en fait il est censé aller dans
/etc/dropbear-initramfs/
+1 @ceremcem pour montrer aussi cela.