【问题标题】:How do you use an identity file with rsync?您如何将身份文件与 rsync 一起使用?
【发布时间】:2011-07-28 11:27:35
【问题描述】:

如何将身份文件与 rsync 一起使用?

这是我认为我应该使用 rsync 来使用身份文件进行连接的语法:

rsync -avz -e 'ssh -p1234 -i ~/.ssh/1234-identity' \ "/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"

但它给了我一个错误:

警告:身份文件 ~/.ssh/1234-identity 不可访问:没有这样的文件或目录。

该文件很好,权限设置正确,它在执行 ssh 时有效 - 只是不适用于 rsync - 至少在我的语法中。我究竟做错了什么?它是否试图在远程机器上查找身份文件?如果是这样,我如何指定我想在我的 本地 机器上使用身份文件?

【问题讨论】:

    标签: unix rsa rsync dsa


    【解决方案1】:

    使用$HOME

    rsync -avz -e "ssh -p1234  -i \"$HOME/.ssh/1234-identity\"" dir remoteUser@server:
    

    或密钥的完整路径:

    rsync -avz -e "ssh -p1234  -i /home/username/.ssh/1234-identity" dir user@server:
    

    在 Ubuntu 上使用 rsync 3.0.9 测试

    【讨论】:

    • 是的,这很好用,不需要使用 ssh-agent 或其他配置选项。
    • +1:这是一个全局问题,就像你不能做 "ls '~'"
    • $HOME 在单引号内不起作用(无变量扩展),因此您必须使用双引号或绝对路径。
    • 在标准 Bash 中应该可以在 "$HOME"$HOME 中正常工作(如果您想让它变得复杂,也可以使用 "${HOME}"
    • 我已将单引号改为双引号。
    【解决方案2】:

    通过 rsync 使用密钥文件:

    rsync -rave "ssh -i /home/test/pkey_new.pem" /var/www/test/ ubuntu@231.210.24.48:/var/www/test
    

    【讨论】:

      【解决方案3】:

      您必须指定身份密钥文件的绝对路径。这可能是 rsync 中的某种怪癖。 (毕竟不可能完美)

      几天前我遇到了这个问题:-)

      【讨论】:

      • 您可以使用 ~ 但不能将其嵌入单引号中,因为这样它就不能正确替换为 /home/username/ 您必须使用双引号才能正确工作,查看@ilcavero 的解决方案
      【解决方案4】:

      这对我有用

      rsync -avz --rsh="ssh -p1234  -i ~/.ssh/1234-identity"  \
      "/local/dir/" remoteUser@22.33.44.55:"/remote/dir/"
      

      【讨论】:

      • 出于某种原因,我必须指定身份文件的完整路径,即/home/user/.ssh/1234-identity。然后它起作用了。可能是因为它是一个不同的外壳,正如 Darhuuk 的回答所建议的那样。
      • @osa 你救了我!我在使用 Drupal 和 rSYNC 时遇到了问题,问题是路径……很奇怪。
      【解决方案5】:

      您可能希望使用ssh-agentssh-add 将密钥加载到内存中。 ssh 将自动尝试来自 ssh-agent 的身份,如果它可以找到它们。命令将是

      eval $(ssh-agent) # Create agent and environment variables
      ssh-add ~/.ssh/1234-identity
      

      ssh-agent 是一个用户守护进程,它将未加密的 ssh 密钥保存在内存中。 ssh 根据运行时 ssh-agent 输出的环境变量找到它。使用eval 评估此输出会创建环境变量。 ssh-add 是管理密钥内存的命令。可以使用 ssh-add 锁定代理。可以在启动 ssh-agent 时指定密钥的默认生命周期,或者在添加密钥时指定密钥的默认生命周期。

      您可能还想设置一个 ~/.ssh/config 文件来提供端口和密钥定义。 (有关更多选项,请参阅 `man ssh_config。)

      host 22.33.44.55
          IdentityFile ~/.ssh/1234-identity
          Port 1234
      

      单引号 ssh 命令将阻止 ~$HOME 所需的 shell 扩展。您可以在单引号中使用键的完整或相对路径。

      【讨论】:

      • 双引号和使用 $HOME 解决了我的问题。你能详细说明前两个命令在做什么吗?我已经熟悉设置配置文件 - 唯一的问题是当我在一台服务器上有多个帐户时。我不希望它能让我为同一个主机指定多个身份文件。
      • +1 这解决了我与drone.io 的问题 :) 非常感谢。
      • 这太棒了。 FTR,您还可以指定要连接的默认用户名,例如User ubuntu 配置 EC2 Ubuntu 实例时:) 谢谢!
      • 如果您使用 csh 样式的 shell(例如 fish),请执行 eval (ssh-agent -c)
      【解决方案6】:

      你是在 bash 还是 sh 中执行命令?这可能会有所作为。尝试将~ 替换为$HOME。尝试为 -e 选项双引号。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-09-28
        • 1970-01-01
        • 2015-09-16
        • 1970-01-01
        相关资源
        最近更新 更多