通过同一网络上的两个 IP 安全复制到本地计算机

通过同一网络上的两个 IP 安全复制到本地计算机

我正在尝试编写一个 bash 脚本,首先从我的本地主机 ssh 进入 IP1(要求输入密码),然后 ssh 进入 IP2。进入 IP2 后,我想 scp 到我的本地机器。

IP1=192.168.10.10
IP2=192.168.10.9

ssh root@$IP1
ssh root@$IP2

cd /var/log

scp message* localuser@$localIP:/home/localuser/Desktop/MessageFolder/

以上是我目前必须通过 Linux 中的命令行手动执行的操作。我基本上是从 192.168.10.9 复制到我的本地计算机

我无法直接访问 IP2。可以将其视为后门。IP2 有密码,而 IP1 没有。

有什么办法吗?如果这没有帮助,我写了更多的代码。

有人可以验证我是否可以做与此解决方案类似的事情:是否可以使用本地机器上的一个命令通过代理进行 scp ?

我也听说过端口转发...在这个例子中它如何工作?

我对 Bash 脚本还很陌生,希望大家能有耐心。

答案1

SSH 对此提供了支持。我将引用以下答案:这里

根据 ssh 手册页,ProxyCommand 是正确的方法

语法为:

ProxyCommand ssh -W %h:%p user@jumphost 2> /dev/null

或者,在足够新的系统上:

从 OpenSSH 7.3(2016 年末)开始,最简单的方法是代理跳转设置。在您的~/.ssh/config

Host B
  ProxyJump A

或者在命令行上,,-J B

后一种解决方案甚至支持任意深度的链,请参阅链接指南。

使用 SCP,您不能使用-J,所以它看起来像这样:

scp -o "ProxyJump root@$IP1" root@$IP2:/var/log/message* /home/localuser/Desktop/MessageFolder/

答案2

您不能在一台机器上启动脚本,然后通过 ssh 进入另一台机器并让脚本在那里继续运行。

但是您可以在远程机器上执行一系列命令,如下所示:

ssh -t root@IP1 'ssh root@IP2 scp /var/log/message*  <user>@<IP>:/home/localuser/Desktop/MessageFolder/; ls /var/log/message*'

这就是说ssh进入 IP1,并将该行的剩余部分作为登录后运行的命令。

引号中是运行的命令,即 ssh 进入第二个 IP,以及登录后运行的命令。

答案3

让我先说清楚一点:

  • localIP 需要 /home/localuser/Desktop/MessageFolder/ 中的文件
  • 所需文件位于 IP2 上的 /var/log/message*
  • 访问 IP2 的唯一方法是从 IP1

您需要研究如何使用密钥代替密码来使用 ssh/scp,如https://wiki.archlinux.org/index.php/SSH_keys。我还建议不要使用 root 用户执行此基本操作。

假设这些假设是正确的,您可以使用 SSH 的隧道功能,这样本地 IP 机器就可以通过 ssh/scp 进入 127.0.0.1:SomeUnusedPort 以到达 IP2。主要棘手的部分是知道何时断开本地 IP 机器与 IP1 机器的连接。

这是一段快速代码块,用于执行我的想法。请注意,我根本没有测试过它。


IP1=192.168.10.10
IP2=192.168.10.9
SomeUnusedPortOnLocalIP=2209

ssh -L $SomeUnusedPortOnLocalIP $IP2:22 root@$IP1 "while [ ! -f /tmp/disconLocalIP.now ]; do sleep 2; done; rm /tmp/disconLocalIP.now " &
# connects to IP1 establishing an ssh tunnel between localIP and IP2
# the loop testing for the existence of a file to let it know when to disconnect
# the & symbol lets the command run in the background and the script to continue with it still running

# wait for the connection to actually establish fully before proceeding.
sleep 10 

# connect to port tunnel on localIP to get files from IP2
scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/message* /home/localuser/Desktop/MessageFolder/
scp -P $SomeUnusedPortOnLocalIP root@$127.0.0.1:/var/log/log* /home/localuser/Desktop/OtherLogs/

# put file on IP1 to tell loop to end and exit previous ssh session
ssh root@$IP1 "touch /tmp/disconLocalIP.now"

相关内容