最近用户反馈ssh密钥登陆Ubuntu系统时报认证错误,为此调查了下。
![https://static.1991421.cn/2022/2022-07-18-215907.jpeg]()
排查
- 公私钥密码使用的RSA加密算法
- 尝试命令行直接SSH登陆,终端App为Mac自带Terminal
ssh -v -i ~/test.pem ubuntu@1.221.54.8
登陆发现可以成功,而webshell报错
注意
- SSH如果报错Permissions 0644 for ‘test.pem’ are too open.即确保私钥文件权限合适
debug1: Local version string SSH-2.0-OpenSSH_8.6
debug1: Remote protocol version 2.0, remote software version OpenSSH_8.9p1 Ubuntu-3
- ssh登陆成功后,想退出输入exit
分析
- 如上本地终端Terminal或iTerm2均可登陆成功,webshell不可以,webshell中用到了node模块ssh2。查询同使用该模块的shell产品,比如tabby,测试发现也是登陆失败,因此可以确定跟ssh2模块实现有关。
- ubuntu22.04是2022年4月发布的新系统,使用老版系统是发现没有该问题,因此也跟系统升级有关,查询发现新系统
默认关闭SSH--RSA验证支持
综上可以确定新系统关闭RSA验证引发了该问题,而本地终端可以应该是其做了兼容支持,但node下ssh2模块明显没有兼容性支持。
解决方案
方案1-服务器配置修改
sudo vi /etc/ssh/sshd_config
增加如下配置PubkeyAcceptedKeyTypes +ssh-rsa
重启电脑生效
方案2-公私钥算法调整
重新创建公私钥,生成算法选择其它的,比如ed25519
方案3-客户端SSH2兼容性提升
大佬已有PR,支持,在没有合并发布新SSH2包之前可以临时调整版到如下版本解决。
1
| "ssh2": "git@github.com:Eugeny/ssh2.git#22735cecf1d9c118b2b8af1c2f80fe5b04996fe1",
|
相关文档