如何使用 `scp` 部署网站的 `.htaccess` 文件?

4
我目前正在使用以下命令上传我的网站内容:
scp -r web/* user@site.com:site.com/

这个方法很好,但是.htaccess文件没有被发送。可能是因为它是隐藏的。
我尝试添加第二行代码来显式地发送这个文件:
scp -r web/.htaccess user@site.com:site.com/.htaccess

这个方法很好,但是现在我必须输入两次密码。

有什么想法可以让这个部署只需要输入一次或零次密码吗?


1
使用rsync而不是scp,这样只会复制更新的文件,节省时间 :) - John Allen
3个回答

9

只需将这两个命令结合起来:

scp -r web/* web/.htaccess user@site.com:site.com/

如果您希望密码输入为0,您可以为ssh/scp设置公钥身份验证

4
一些背景信息:通配符*不能匹配所谓的“点文件”(即文件名以点开头的文件)。
一些shell允许您设置选项,以便它可以匹配点文件,但这样做会带来很多痛苦:现在*也将匹配 . (当前目录)和 .. (父目录),这通常不是预期的结果,可能会令人惊讶!(使用rm -rf *删除父目录可能不是开始一天的最佳方式...)

3
提醒一下 - 不要尝试使用.*匹配带点的文件(例如.htaccess)- 这会不方便地匹配到..,并导致将路径上的所有文件复制到根目录。我曾经用rm这样做过一次,结果不得不重建服务器,因为我弄乱了/var
@jwmittag:
我在Ubuntu上进行了测试,使用cp.*是匹配的。以下是一个示例:
root@krash:/# mkdir a
root@krash:/# mkdir b
root@krash:/# mkdir a/c
root@krash:/# touch a/d
root@krash:/# touch a/c/e
root@krash:/# cp -r a/c/.* b
cp: will not create hard link `b/c' to directory `b/.'
root@krash:/# ls b
d  e

如果 .* 没有匹配上 ..,那么 d 就不应该在 b 中。

我正在谈论单独使用的“*”通配符。它不会匹配以点开头的文件。“.*”将匹配所有以点开头的文件,包括特殊目录“.”和“..”。 - Jörg W Mittag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接