因为最近公司开始使用国产信创系统。我也有机会简单使用了一下。
发现居然使用的是Linux内核。正巧单位有相关产品需要登录SFTP服务器下载软件。原来WINDOWS版本不能用了。
基于之前研究LINUX的学习经验。想编写一个sftp脚本到服务器上拉取回单。
脚本的内容就不多提了。网上大把都有。问题的关键在于登录sftp服务器遇到的证书报错问题。
OPENSSH_8.8以前的版本,默认支持ssh-rsa证书。
可以通过命令:sftp -o Port=[port] -i [id_rsa] [username]@[hostname]
进行远程连接服务器。
然而OPENSSH_8.8以后的版本,由于安全原因官方取消了ssh-rsa证书的支持。
如果继续使用上述命令进行连接,会报错:
Permission denied (keyboard-interactive,publickey)
网上搜到的各种原因都有。多半是集中在服务器端修改/etc/ssh/sshd_config文件,使其向下兼容加密证书。
但我的是客户端版本高,需要向下兼容服务器内容。
所以在sftp(ssh通用)命令中需要加上以下两行:
HostkeyAlgorithms=+ssh-rsa
PubkeyAcceptedAlgorithms=+ssh-rsa
使其支持ssh-rsa证书
所以最终命令为:
sftp -o Port=[port] -i [id_rsa] -o HostkeyAlgorithms=+ssh-rsa -o PubkeyAcceptedAlgorithms=+ssh-rsa [username]@[hostname]
部分博主提到HostkeyAlgorithms=+ssh-rsa选项。但是如果没有PubkeyAcceptedAlgorithms=+ssh-rsa项目。客户端无法接受来自服务端的低版本证书
依然会报错:Permission denied (keyboard-interactive,publickey)
报错内容很难让人联想到OPENSSH的版本问题,让我挠头两周才得以解决。故留此以备后查
评论(已关闭)
评论已关闭