我目前正在尝试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>
当您想要在两台服务器之间复制文件时,请使用
-3
switch,这将从您的主机(您可以在其中访问代理)进行两次身份验证。
答案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