1.buildroot方式制作文件系统,并启动虚拟机:
qemu-system-aarch64 -machine virt -nographic -cpu cortex-a57 -smp 2 -hda /home/daniel/Downloads/linux/rootfs_debian_arm64.ext4 -kernel /home/daniel/Downloads/linux/arch/arm64/boot/Image -append console=ttyAMA0 root=/dev/vda earlyprintk=serial slub_debug=UZ -m 2014 -netdev user,id=user0 -device virtio-net-device,netdev=user0
2.系统启动会阻塞
通过注释启动脚本的方式定位/etc/init.d/S50ssh内的命令# /usr/sbin/sshd 会一直阻塞;
3.查看源码:sshd.c
int main(){
...
seed_rng(); //需要产生随机数
...
}
[root@myvm test]# cat /proc/sys/kernel/random/poolsize
4096
[root@myvm test]# cat /proc/sys/kernel/random/entropy_avail
0
/proc/sys/kernel/random/poolsize,说明熵池的大小(以位为单位)。
例如:在停止抽水之前我们应该储存多少随机果汁。
/proc/sys/kernel/random/entropy_avail 是当前池中随机果汁的数量(以位为单位)。
4.消耗掉熵池的实验:
[root@myvm test]# cat /dev/random > /dev/null &
[1] 19058
[root@myvm test]# cat /proc/sys/kernel/random/entropy_avail
0
5.产生熵的方法:Haveged
Haveged 是一个守护进程,它使用处理器的“抖动”将熵添加到系统熵池中。
下载haveged-1.9.1.tar.gz然后移植到文件系统,解决因开机启动sshd导致系统无法启动的问题。
6.再次执行sshd
# /usr/sbin/sshd
[ 79.906345] NET: Registered protocol family 10
[ 80.059676] Segment Routing with IPv6
Could not load host key: /etc/ssh/ssh_host_rsa_key
Could not load host key: /etc/ssh/ssh_host_ecdsa_key
Could not load host key: /etc/ssh/ssh_host_ed25519_key
sshd: no hostkeys available -- exiting.
生成rsa,ecdsa,ed25519三种类型的秘钥:
# ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key
# ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key
# ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key
7.附:注意秘钥文件权限过大有可能导致启动失败,本实验未遇到(修复方法:chmod 600 /etc/ssh/ssh_host_*_key)