SCP 通过中间宿主

SCP 通过中间宿主

我尝试研究过我的选择,但是,没有一个能达到我所需要的效果。最有用的信息可以在这里找到:通过中间主机 scp 文件

我有以下设置:我在机器 A 上。我在机器 B(启用了 ssh 代理)上设置了密钥,授予我访问机器 C 的权限。(顺便说一句,这种配置的原因是机器 B 的访问受到严格限制,包括双因素身份验证,并且每台其他机器都配置为只允许来自这台机器的 SSH 根访问。)

问题是 ssh-agent 代码仅在登录 shell 时运行,而不是在通过 ssh 运行命令时运行,因此它不会尝试使用位于计算机 B 上的密钥来访问计算机 C。这是我的.bashrc和中的代码.profile

export SSH_AUTH_SOCK=~/.ssh/ssh-agent.$HOSTNAME.sock
ssh-add -l 2>/dev/null >/dev/null
if [ $? -ge 2 ]; then
  ssh-agent -a "$SSH_AUTH_SOCK" >/dev/null
fi

理想情况下,我希望能够为某些命令设置别名,以便可以像 scp 一样运行它(例如scpproxy localfile user@MachineC:/root/remotefile)。我当前的解决方案是从机器 B 开始scp -3 user@MachineA:localfile user@MachineC:remotefile(其中-3导致 scp 使用本地机器作为中间主机,而不是默认尝试直接从 A 复制到 C),但这并不完美。

任何帮助都将不胜感激!

答案1

scp中间主机的配置ssh(本质上)是相同的。scpssh甚至rsync在相同的上下文中应该对你有用。从根本上讲,你应该使用相同的密钥从机器“A”访问“B”,就像你从机器“B”访问“C”一样。但是,看起来你可能正在尝试使用位于“B”上的无密码密钥来访问“C”。撇开无密码密钥的(不良)安全隐患不谈,我建议你将位于“A”上的(希望受密码保护的)私钥的相同公钥放入~/.ssh/authorized_keys“C”上的文件中。这样,你需要做的就是像这样:

scp -o "ProxyCommand ssh -A B -W %h:%p" C:file .

这将通过主机“B”设置代理/跳跃,获取“C”上主目录中的文件名“file”并将其放入“A”上的当前工作目录中。

此外,您可以将其编入您的~/.ssh/config文件中:

Host C
  ProxyCommand ssh -A B -W %h:%p

然后,您可以简单地:

scp C:file .

此外,这一切都不需要别名或脚本来为您完成。您只需scp直接使用即可。

相关内容