通过 scp 和 ssh 连接到不同的端口-为什么使用不同的标志?

通过 scp 和 ssh 连接到不同的端口-为什么使用不同的标志?

我经常sshd在非标准端口上运行(即不是22)。

ssh我使用 时,我会使用-p标志。但是,当使用 时scp,标志是-P(小写 vs 大写)。

既然它们来自同一个套件,那么为什么不使用相同的标志大写字母呢?真的只是因为有两个不同的人写了它吗?两者都不使用其他以“p”的形式表示任何事物——如果它们的作用相同,那不是更有意义吗?


*我知道 - 我可以修改源代码并得到一个可以接受的包两个都形式:但是这并不能解决上游问题,我也不希望我的补丁提交能够进入主干代码(尽管我会尝试一下)。

答案1

我的猜测是...这是仅有的猜测是 rcp 已经使用了 -p 来表示“保留原始文件的修改时间、访问时间和模式”的当前含义。由于 scp 被编写为 rcp 的嵌入式安全替代品,因此遵守 rcp 理解的该标志非常重要。这意味着使用非标准端口的选项必须使用另一个标志。

编辑:可能的包装器将 ssh 的 -P 转换为 -p。它应该可以处理常见情况,但尚未经过彻底测试。为了处理最奇怪的情况,最好使用能够正确解释命令行的程序(例如 perl 的 Getopt 模块)。

#!/bin/bash

for x in "$@"; do
    if [ "$END"x == "x" ]; then
        case $x in
            "-P") x="-p" ;;
            "--") END=1 ;;
        esac
    fi
    ARGS="$ARGS $x"
done

ssh $ARGS

相关内容