将 scp 与转发的 ssh 代理一起使用

将 scp 与转发的 ssh 代理一起使用

我目前正在尝试scp使用本地计算机上的 ssh 密钥将文件从一台服务器传输到另一台服务器。

这是我当前正在使用的命令:

sudo scp -r -o "ForwardAgent yes" <new_folder> <second-server-path>

我已经关注了这个 github 文档验证我的 ssh 代理是否被转发到第二个服务器的终端。

-o "ForwardAgent yes"来自这个参考,但没有出现在我的man scp参考中。

然而,在这一切之后,该命令仍然要求输入密码(我们试图避免这种情况)。关于如何使用 ssh 转发有什么想法吗?

答案1

  • scp 不支持转发您的代理(硬编码为在代码中禁用)所以这不可能是你正在尝试的。

  • 问题出在sudo.连接ssh-agent存储在环境变量SSH_AUTH_SOCK( echo $SSH_AUTH_SOCK) 中,并且该变量在执行期间不会保留,sudo因此有两种可能性:

    • 不要sudo使用scp.仅运行scp到某个正常位置,然后将sudo cp文件运行到所需位置。

    • 强制sudo保护环境。使用-E开关变量:

      sudo scp -r <new_folder> <second-server-path>
      
  • 当您想要在两台服务器之间复制文件时,请使用-3switch,这将从您的主机(您可以在其中访问代理)进行两次身份验证。

答案2

在 OpenSSH 8.4(2020 年 9 月 27 日发布)中,scp 和 sftp 添加了对代理转发的支持。

https://www.openssh.com/txt/release-8.4

  • scp(1)、sftp(1):允许 -A 标志显式启用 scp 和 sftp 中的代理转发。默认情况下仍然不转发代理,即使 ssh_config 启用它也是如此。

警告!当跳转主机受到威胁或您受到中间人攻击的影响时,使用代理转发是一个安全问题。

如果您使用跳转主机将文件从本地机器复制到内部网络,最好使用ProxyJump而不是代理转发,因为与目标服务器的连接是端到端加密的,跳转主机无法访问您的代理或读取数据。

使用跳转主机的 scp 命令示例:

scp -o 'ProxyJump your.jump.host' myfile.txt remote.internal.host:/my/dir

更新:

OpenSSH 8.4 中添加了 scp 和 sftp 的代理转发,用于远程到远程文件传输。

过去,您必须在第一台主机上提供凭据,或者必须通过本地计算机路由流量。

现在,OpenSSH 8.4 scp 和 sftp 能够进行代理转发。

scp -A user1@remote1:/home/user1/file1.txt user2@remote2:/home/user2/file1.txt

相关内容