我希望每天使用自动 ftp 命令将文件上传到远程服务器。有人可以帮我检查下面的命令是否正确或错误吗?
curl -Tu username:password /path/to/dir/*(om[1]) sftp://sftp.example.com/remote/dir
在哪里
username:password
是我自己的用户名和密码。/path/to/dir/*(om[1])
:从我的本地目录获取最新(更新)文件sftp://sftp.example.com/remote/dir
:安全文件传输
答案1
您的命令行有问题,您可以检查手册页。基本上你需要将-T <file to be uploaded>
与 分开-u <user:password>
。最后你的命令行应该看起来更像:
curl -T /path/to/dir/*(om[1]) -u username:password sftp://sftp.example.com/remote/dir
不过,我不确定您提到的正则表达式的实际含义*(om[1])
。
当然,如果使用 SFTP,您可以使用 SSH 私钥进行身份验证,而不是根据选项使用用户名和--key
密码--key-type
。有关详细信息,请参阅上面链接的文档。
最后,问题是关于FTP
而命令行示例是关于SFTP
,但这不应该改变我提出的解决方案。
答案2
为什么不使用 rsync 来代替呢?您可能必须安装它(使用您的包管理器),但它是为此类事情而设计的。
RSYNC_PASSWORD='password' rsync -rtv /path/to/dir/ [email protected]:remote/dir
-r 将递归 rsync,-t 保留时间戳,因此现有文件不会重新上传(有效),而 -v 则很详细。
如果您创建并复制 ssh 公钥,则不需要执行该RSYNC_PASSWORD='password'
部分。
如果您没有公钥/私钥组合,请运行:
ssh-keygen
然后
ssh-copy-key-id [email protected]
这假设您的远程服务器支持连接和更新文件$HOME/.ssh/authorized_keys
;否则,您必须authorized_keys
使用公钥手动上传文件。
这假设您正在运行最新版本的 Linux。 Mac OS 等 Unix 系统没有ssh-copy-key-id
.以下是有关在远程主机上生成和安装公钥的更多信息: