是否可以在sftp上使用rsync(没有ssh shell)?

Modified on: Wed, 13 Nov 2019 09:40:02 +0800

ssh上的Rsync,每次都很棒。

但是,尝试rsync到只允许sftp登录但不允许ssh登录的主机,会出现以下错误:

  

rsync -av / source ssh user @ remotehost:/ target /

  
  

协议版本不匹配 - 是你的
  外壳干净? (请参阅rsync手册页
  解释)rsync错误:
  协议不兼容(代码2)at
  compat.c(171)[sender = 3.0.6]

以下是rsync手册页中的相关部分:

  

此消息通常由您的启动脚本或
  远程壳设施生产
  流上不需要的垃圾
  rsync用于
  它的运输。诊断这个问题的方法是运行你的
  像这样的远程shell:

          ssh remotehost /bin/true > out.dat

  
  然后看看out.dat。如果一切正常,那么
  out.dat应该是一个零长度文件。
  如果您收到上述错误
  来自rsync
         然后你可能会发现out.dat包含一些文本或
  数据。看看内容并尝试
  弄清楚生产它的是什么。该
  大多数人
         mon原因是配置错误的shell启动脚本(例如
  如.cshrc或.profile)包含
  输出语句为非交互式
  登录。

在我的系统上尝试此操作会在out.dat中生成以下内容:

  

ssh-dummy-shell:不允许使用命令。

正如我所想,主持人不允许使用ssh登录。

以下链接显示可以使用保险丝完成此任务使用sshfs - 但它非常慢,不适合生产使用。

是否有机会让rsync sftp工作?

作者:Tom Feiner

最佳答案

不幸的是不直接。 rsync需要与shell的干净链接,以便在以这种方式运行时启动rsync的远程副本。

如果你有办法在主机上运行长期监听进程,你可以尝试手动启动rsync来监听非特权端口上的连接,但是大多数这样做的技术也需要通过SSH进行适当的shell访问,并且它依赖于主机防火墙安排,允许您选择的端口上的连接(以及首先安装了rsync的主机)。对于非公开数据,通常不建议将rsync作为可公开寻址的服务(而不是间接通过SSH或类似服务)运行。

如果您的主机允许使用PHP或类似的脚本并且没有将其锁定,那么额外的进程不能被用户脚本exec编辑,那么您可以尝试以这种方式在侦听模式下启动rsync。如果您的终端是可连接的(您正在运行可由外部访问的SSH),您可以反过来尝试这一点 - 让脚本在服务器上运行rsync,但不是监听传入连接,而是让它联系您的本地服务并以这种方式同步。这仍然依赖于实际安装在主机上的rsync,它不是给定的,或者您可以上传工作副本,但是没有以公开可寻址的方式运行rsync守护程序并通过未加密的方式与之交谈的安全隐患信道。

如上所述,可能会违反主机政策,即使它完全有效,也可能会让你开始。您最好询问是否可以为该帐户启用完整的shell,并放弃该主机的rsync或放弃该主机并移动到其他位置,如果他们不这样做的话。


相关问答

添加新评论