从通过 ssh 连接的一台计算机复制并获取文件到另一台计算机

从通过 ssh 连接的一台计算机复制并获取文件到另一台计算机

我读了很多与此非常相似的问题的答案,但我找不到真正适合我的问题的东西。情况是这样的。我有一台机器,其地址是“machine1@address”,从这台机器我到达“machine2@ different_address”。现在,我必须直接从计算机上向 machine2 发送文件/从 machine2 获取文件,因为我不想“永久”占用 machine1 上的内存。

我的目标是通过编写 Python 脚本来自动化此过程。所以,最好的解决方案是避免打开(我真的不知道如何调用它,我希望你会理解)machine1 的“主页”,因为 Python 脚本将停止运行,直到我关闭它(至少,这是我简单使用 ssh 时发生的情况)。

谢谢你!

答案1

我对“主页”术语和“machineX”形式的用户名感到困惑。而且我认为确实没有必要使用 python。

我的解决方案是:

建立到 machine2 的 ssh 隧道:

mycomputer$ ssh -L2222:different_address:22 machine1@address

现在您可以通过隧道复制文件,或使用 sshfs 或 rsync 或任何您需要的内容:

mycomputer$ scp -P 2222 machine2@address:/whatever /target_local_dir

另一种方法是从address计算机运行 scp,假设 sshd 正在运行mycomputer,或者只是链接 ssh 命令和cat您需要的文件:

ssh machine1@address ssh machine2@different_address cat /path_to_the_remote_file > /target_local_file

(根据需要分发 ssh 密钥)。

答案2

您可以使用 scp :

scp 文件 user@machine2:/home/user

或相反

scp user@machine2:/home/用户/文件/本地/目录

答案3

尝试打开从 machine1 到您的主机的 ssh 隧道

ssh user1@machine1-ip-address -p machine1-ssh-port -L local-port:machine2-ip-address:machine2-ssh-port -N

例如

ssh user1@machine1 -p 22 -L 8181:machine2:22 -N

在一个终端中执行此操作后,它将要求输入 machine1 密码。您不应该关闭该终端,因为您将关闭隧道。

现在打开第二个终端,您应该能够从您的计算机连接到 machine2。命令应该是

ssh user2@machine2 -p 8181

这样您就可以从本地计算机通过 ssh 访问 machine2。

相关内容