我目前使用 KeePass 和 ssh-agent 进行无密码 ssh/scp 访问服务器。我还使用该~/.ssh/config
文件让生活变得更轻松。我发现它在我的大多数用例中都运行良好。
我的本地系统通过 gitbash shell 使用“openssh for windows 8.1”,server1 是 debian 8(openssh 6.7),server2 是 debian 11(openssh 8.4)。
我要解决的问题是尝试在两个远程服务器之间 scp 文件时。
对于小文件,将其复制到/通过我的本地机器复制并不是什么大问题,但对于大文件来说,这是一个大问题,所以我想要直接远程 -> 远程复制。
理论上我可以做以下事情:
scp server1:/file server2:~/Downloads/
但这不起作用。
详细模式表明我已通过服务器 1 的身份验证(通过密钥),但随后尝试对服务器 1 上的本地文件运行 scp 命令。服务器 1 没有访问服务器 2 的配置或私钥,我不愿意将它们放在那里。有没有办法让它工作?
我认为我要求的是一种转发我的密钥和配置(仅用于会话)的方法,以便服务器 1 可以连接到服务器 2,但这可能不是最好的工作方式。
我知道-3
scp 选项,但这意味着文件通过我的本地机器传输,我想避免这种情况。它似乎也不起作用,在两次向 server1 进行身份验证后,我被卡在以下命令(来自调试)上:
Sending command: scp -v -f /file -- server2 scp -v -t ~/Downloads/
如果这个能起作用就好了,但这不是我想要解决的问题。
只要我可以使用存储在本地密码管理器中的 ssh 密钥,我愿意在某种程度上改变工具。
答案1
我找到了一个部分解决方案,其中密钥被转发。这涉及将 server1 定义添加ForwardAgent yes
到我的本地.ssh/config
,然后修改命令以使用用户名和主机名,例如:
scp server1:/file [email protected]:~/Downloads/
如果不需要最后的更改并且我可以在本地.ssh/config
文件中使用别名,那就太好了。
使用 ForwardAgent 时似乎还存在一些额外的安全风险/问题,因此也不是理想的选择。