前两天刚刚说过折腾Ubuntu 24.04 LTS SSH遇到的灵异事件,在/etc/ssh/sshd_config修改了端口但是不生效,事后证明是Ubuntu新版本默认sshd为使用systemd套接字激活。
(图源 :pixabay)
找到了问题所在也就解决了问题,我按新机制设置ssh.socket监听的端口,搞定!也不用联系《走进科学》剧组揭秘了。
这之后我在本地机器上(Windows 10)以及本地服务器上(Ubuntu 22.04 LTS)上进行各种组合测试,一切OK,总算可以长出一口气了。
不过,有句话咋说来着按下葫芦又起瓢,或者是像任贤齐《伤心太平洋》中唱的那样一波还未平息,一波又来侵袭,总之又遇到灵异事件了。
话说,我在Ubuntu 24.04 LTS上添加了一个新用户,然后尝试在我的一台香蕉派M3上设置使用密钥远程登陆这个用户。
我先在客户机(M3)上生成密钥对:
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这步貌似一切正常:

然后尝试使用如下指令上传公钥至远程SSH账户:
ssh-copy-id -p 50001 -i ~/.ssh/id_rsa.pub testuser@ip
结果各种出错:

不过其实出错信息中已经给出了原因和解决方案 REMOTE HOST IDENTIFICATION HAS CHANGED! remove with: ssh-keygen -f "/home/testuser/.ssh/known_hosts" -R [ip]:50001
按提示信息操作一下后再次尝试上传(安装)公钥的指令并输入远程主机账户密码之后,得到如下提示:

也就是说,已经把公钥成功上传(安装)到远程主机的指定账户下。
至此虽然略有波折,但是还算顺利。但接下来,事情就变得奇怪了,原本公钥安装成功,我使用私钥登陆就可以啦,结果无论如此尝试,也不成功。
一直给我返回如下提示(这时我在远程主机上sshd设置中关闭了对应账户的密码登陆):

可是我应该可以用私钥授权登陆才对呀,莫非我公钥没传成功?我又特意去远程主机手工查看相应的目录、权限、以及文件内容,貌似一切正确呀!说明公钥安装是成功的。
那问题是出在哪里呢?为了测试,我又重新允许远程主机相应用户的密码登陆,尝试用密码登陆,结果你猜怎么着,密码登陆也登不上去!
这次提示信息变成这样:

我又给ssh指令加了-vvvv参数来调试,又加了-i ~/.ssh/id_rsa来手工指定私钥,结果眼睛都看花了,也没能从调试信息中看出来什么四五六,简直令人绝望!
到底是哪里出错了呢?我百思不得其解!莫非又要联系CCTV1的《走近科学》栏目?话说即便我联系了,人家也不能搭理我呀,只能自己尝试解决吧!
远程主机sshd、账户配置貌似都没错;公私钥生成也没错;公钥上传安装也没错;我使用的ssh指令也没错!那我还能朝哪个方向探究或者测试呢?
我突然想到,我一直在香蕉派M3中折腾,那么有没有可能是这个M3的问题呢?虽然我一直没怀疑它,毕竟从它SSH到我之前的一些主机都正常呢!
但是死马当活马医呗,我在我其它机器上按相同流程测试一下,结果丝滑无比,一切正常!那似乎事情就名了啦,一定是我香蕉派M3有问题。
那问题又来了,为啥之前从香蕉派能正常登陆其它服务器,而无法登陆我这个新的Ubuntu 24.04 LTS呢?这貌似不科学呀?!
我突然想起我之前用老旧版本Putty无法登陆AWS新建的EC2实例的问题,那次是什么缘故来着?找来看看,好在当时也记录分享了:
就是旧版本的SSH被弃用了,所以要用新版的Putty等支持新版SSH的协议的工具。
那么似乎问题有些类似?是不是我香蕉派M3上的ssh版本过老导致的这个问题呢?看一下版本信息喽:
ssh -V
返回如下:

OpenSSH_6.7p1 Raspbian-5+deb8u8, OpenSSL 1.0.1t 3 May 2016
这这这都无法用高寿形容了吧?2016年耶,我才刚刚开始玩HIVE(前身STEEMIT),但HIVE这些年不断地在升级迭代,而我这个香蕉派M3上的OpenSSH啥的还是这么老旧!
那么这个问题有没有解决方案呢?答案是有的,比如我手工编译安装新版本的OpenSSH 客户端,又比如降级Ubuntu 24.04 LTS的SSH的安全设置等(超级不可取)。
看了一眼,这些方式要么要费力折腾,要么可能引进新的安全问题,所以最好的方式就是放弃这个香蕉派M3,谁让它没有新版本的OS呢?这点树莓派做得好多了,再老旧得硬件都可以用新版OS。
(图源 :pixabay)
嗯,就这样,在树莓派上玩喽,本来淘汰旧的香蕉派M3就在我的计划之中呢!