我遇到一个问题,服务器升级到 RHEL 6.5,并且我们在通过 sftp 和 ssh 命令连接的 RHEL 5.9 安装上自动执行了 bash 脚本。
现在,新服务器仅支持密码aes128-ctr,aes192-ctr和aes256-ctr。
我可以更新 ssh 命令以使用带有 aes256-ctr 的 -c 选项,并且此操作有效:
ssh -c aes256-ctr ${remote_host} ${my_command}
但是,当我尝试对 sftp 执行等效操作时:
sftp -oCipher=aes256-ctr ${remote_host} <<< $'get /home/me/* me/'
我收到一个错误,客户端不支持与服务器相同的密码:
未找到匹配的密码:客户端 arcfour256、aes128-cbc、3des-cbc、blowfish-cbc、cast128-cbc、arcfour、aes192-cbc、aes256-cbc 服务器 aes128-ctr、aes192-ctr、aes256-ctr
这些 ssh 和 sftp 命令在同一个 RHEL 5.9 框中执行,所以我想知道为什么它对 ssh 有效而对 sftp 无效?
另外,如何修复此问题,以便我可以使用 sftp 进行连接而无需进行任何客户端更改?
答案1
该Cipher
指令适用于 SSH 版本 1(目前已不再使用)。
对于 SSH 版本 2,请使用Ciphers
:
sftp -oCiphers=aes256-ctr
但请注意,也sftp
支持-c
切换。因此无需使用-o
。
查看sftp
手册页:
-c cipher
选择用于加密数据传输的密码。
此选项直接传递给SSH(1)。
该选项自以下日期起受支持OpenSSH 5.4. 更改伪装成“在 sftp(1) 中支持 scp(1) 的大部分命令行参数“。
请注意,命令行参数-c
主要相当于Ciphers
指令(尽管它可以返回到Cipher
)。引用自ssh
手册页:
-c cipher_spec
选择用于加密会话的密码规范。
协议版本 1 允许指定单个密码。支持的值是“3des”、“blowfish”和“des”。对于协议版本 2,cipher_spec
是按优先顺序列出的以逗号分隔的密码列表。请参阅Ciphers
关键字ssh_配置(5)了解更多信息。