解决在 Linux Deploy 中安装老版本的 Debian 无法开启 ssh 的错误

这几天在废弃的手机和平板上尝试安装完整的Linux系统,折腾了好几天,发现很多软件对arm的支持相当不完善。源里缺很多包,自己编译也编译不过。有些软件的老版本反而是稳定的,新版本总是出现问题,比如 firefox。来来回回换了几个版本,最后总结下来比较稳定的版本是 Debian Jessie。当我装回 Jessie 后尴尬地发现,sshd 起不来了,VNC也起不来了。经过仔细观察,发现在安装完基本系统后,开始配置 ssh,结果刷新完 apt 缓存后,相关的包压根就没有安装,提示 openssh 相关的包无法通过验证。因为前几天的尝试是成功的,被成功的经验误导了,排查了好久最终发现,确实是GPG证书过期了:我在昨天(2022/11/20)发现问题!证书的过期时间是 2022/11/19。

W: GPG error: http://mirrors.ustc.edu.cn jessie Release: The following signatures were invalid: KEYEXPIRED 1668891673

因为 apt 命令是在 chroot 的沙盒里运行的,要如何从外部干预呢?因为没有文档,只能乱猜乱试。无意间发现了 Linux Deploy 有一个 telnet 守护模式,而且有一个 Web 接口。

方法一、通过Web接口从本机访问

linux deploy 设置:

启用httpd守护模式:true
端口:5080
访问限制:A:127.0.0.1 D:*

上面的A:127.0.0.1允许本机访问,而D:*则屏蔽掉所有外部访问, 相当于打开了白名单。访问限制不允许留空,如果删掉,会自动填上诸如:/:android:xxxxxxxx的内容。此时,不再是基于地址的访问限制策略,而是基于密码的验证,其中android是用户名,xxxxxxxx就是密码。

再点击菜单中的“终端”,此时,就会自动打开浏览器并打开以下地址:

http://127.0.0.1:5080/cgi-bin/terminal?size=10

如果android自带的浏览器过于老旧的话,无法正常打开页面,此时需要用更现代的浏览器去打开上面的地址。我用 firefox 打开就正常了。也可以更改上面的“访问限制”,允许外部主机,然后用电脑上的浏览器登陆进去操作。

方法二、通过telnet从其他机器访问

linux deploy 设置:

启用telnet守护模式:true
端口:5023
本地主机:false

设置完成后从其他机器访问:

telnet <ip> 5023

上面的方法二选一,如果正常的话可以获得一个shell,进入shell的第一步,先运行su提权。

此时获得的 shell 不是容器内的 Linux shell, 而是宿主机(android)的shell。Linux Deploy 在 data 目录下释放了一个 'bin'目录,里面有一些基本的 Linux命令,最关键的是命令linuxdeploy,直接运行打印帮助信息。下面是一些常用命令:

# 执行布署
linuxdeploy deploy 

# 挂载容器
linuxdeploy mount

# 卸载容器
linuxdeploy umount

# 启动容器, 
linuxdeploy start

# 关闭容器
linuxdeploy stop

最关键的是 shell子命令,它可以执行容器内的 shell 命令。

# 先启动容器
linuxdeploy mount
liuuxdeploy start

# 忽略证书验证,强制安装缺失的包
linuxdeploy shell -d -u <username> "sudo apt install -y --force-yes openssh-server"

执行完上面的命令,如果不意外的话,会从卡住的地方继续安装 openssh, --force-yes忽略证书验证。安装完成后, Debian 会自动启动 sshd 服务,此时,就可以通过 ssh 从外部进入容器内的系统了。

考虑到 Jessie 早已经被废弃,官方不可能再更新GPG证书,以后从源里安装任何包都会提示无法通过验证,都需要带上 --yes --force-yes选项,一劳永逸的解决办法是:

echo 'APT::Get::AllowUnauthenticated "true";' | sudo tee /etc/apt/apt.conf.d/99disable-gpg-auth

后记:经过测试,在 Linux deploy 上运行最稳定的 Debian 版本其实是 Buster。因为 Buster 还在维护期,所以,本篇文章的意义并不大。我最初尝试的是 Jessie, 我尝试了 Stretch 后以为确实 BUG 更多,我以为新版本对老硬件的适配更差,于是就回到 Jessie 了。直到我尝试了 Buster 后才发现,稳定性相当出色。不管是 firefox 还是 chromium 都很少崩溃。目前我的老平板已经接上蓝牙键盘和鼠标,完全变成 PC 机了。

posted @ 2022-11-21 12:39  fmcdr  阅读(1665)  评论(0编辑  收藏  举报