带有密钥的两台服务器之间的 ssh 隧道

带有密钥的两台服务器之间的 ssh 隧道

我有两台服务器,A 和 B,使用两个不同的密钥。我在服务器 A 上工作,需要将文件传输到服务器 B。但是我在传输文件时遇到了麻烦,因为当我尝试以下 ssh 隧道时,服务器连接被拒绝;

从服务器A:

ssh -L 1234:server_B:22 -p 45678 user_in_A@server_A

然后它似乎暂停了,过了一会儿,连接就过期了。

如果我使用如下密钥正常进行 scp,那么我就能传输文件,因此我将在 scp 和 ssh 中使用的代码结合起来。

ssh -i key -L 1234:server_B:22 -p 45678 user_in_A@server_A

但它不起作用。

在我这样做之前,我谷歌了一下是否有办法做到这一点。但大多数答案和解释似乎都指向了“ssh -L ...没有关键”,那么我在这里错过了什么?也许是我还没有掌握的概念,或者我偏离了目标?

答案1

如果服务器 A 可以与服务器 B 的端口 22 建立 TCP 连接,并且您在服务器 A 中输入这些命令,则隧道是不必要的。

ssh -L 1234:server_B:22 -p 45678 user_in_A@server_A

如果你正在运行这些命令在服务器 A 上, 它的意思是:

  • 你期望服务器 A 有sshd端口 45678
  • 您正在从服务器 A 建立到 user_in_A@server_A 的 SSH 连接
  • 您还建立了从服务器 A 的端口 1234 到服务器 B 的端口 22 的隧道,即服务器 Asshd将在服务器 A 的端口 1234 中设置 TCP 代理,并将到它的连接转发到服务器 B 的端口 22。

由于 SSH 连接是从服务器 A 到服务器 A,因此隧道的加密部分将完全在服务器 A 内,因此几乎无用。如果隧道有效,则意味着您可以简单地使用它scp来传输文件而无需建立隧道:

scp -i key_for_user_in_B /some/where/local/files user_in_B@server_B:

或者

scp -i key_for_user_in_B user_in_B@server_B:/some/remote/path /some/local/path/

第一个会将文件从本地(A)“推送”到 B,第二个会将文件从 B“拉取”到本地(A)。

相关内容