如何在不使用-O选项的情况下覆盖scp默认传输协议,以及配置scp默认使用旧SCP协议
如何在不使用-O选项的情况下覆盖scp默认传输协议,以及配置scp默认使用旧SCP协议
嗨,我刚好研究过类似的问题,给你整理了清晰的解决步骤:
一、配置scp默认使用旧SCP协议(无需每次手动加-O)
OpenSSH 9.x版本后scp默认采用SFTP协议,要让它默认切回旧的SCP协议,有两种配置方式:
1. 全局配置(所有用户生效)
编辑系统级的SSH配置文件/etc/ssh/ssh_config,在文件中添加一行:
SCPProtocol scp
保存后,所有用户执行scp命令时都会默认使用旧SCP协议。
2. 用户级配置(仅当前用户生效)
编辑用户目录下的SSH配置文件~/.ssh/config,同样添加一行:
SCPProtocol scp
如果只想针对某台特定主机生效(比如仅连接旧版本SSH服务器时用旧协议),可以写成主机匹配块:
Host 你的目标主机名或IP地址 SCPProtocol scp
这样只有连接这个指定主机时,scp才会自动用旧协议,其他场景依然保持默认的SFTP。
二、将PubkeyAcceptedAlgorithms配置到~/.ssh/config的方法
你提到的解决签名算法兼容的PubkeyAcceptedAlgorithms=+ssh-rsa参数,完全可以写到配置文件里自动生效:
1. 全局生效(所有主机连接)
在~/.ssh/config开头添加:
Host * PubkeyAcceptedAlgorithms +ssh-rsa
Host * 表示匹配所有主机
2. 仅针对特定主机生效
如果只需要给老旧SSH服务器配置,可以写成:
Host 老旧服务器的主机名或IP PubkeyAcceptedAlgorithms +ssh-rsa
这样每次连接这台服务器时,会自动启用ssh-rsa签名算法,不用每次在命令行加-o参数。
补充说明
要注意,你之前用的-o参数只是解决了签名算法不兼容的连接问题,并没有切换回旧SCP协议。如果需要同时解决这两个问题,可以把两个配置结合起来,比如针对某台老旧服务器:
Host 老旧SSH服务器 SCPProtocol scp PubkeyAcceptedAlgorithms +ssh-rsa
这样连接这台服务器时,scp会自动用旧协议,同时也能兼容老的签名算法。
备注:内容来源于stack exchange,提问作者Thomas Freedman
相关产品推荐
相关产品推荐

