我经常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