从第一台计算机到第二台计算机的scp,以将某些内容发送到第三台计算机

  • 本文关键字:计算机 三台 一台 二台 scp ssh scp
  • 更新时间 :
  • 英文 :


我有一个bash脚本,可以在超级计算机上使用(CentOS)。此计算机的设置使得只有一个节点可以访问internet(称之为"connectedNode"),并且通过此节点,可以访问所有其他节点(称其为"workNodes)。大部分工作都是在通过connectedNodeworkNodessh之后完成的。

我有一个bash脚本,它本质上是一行代码:

#!/bin/bash
# scpdropbox
scp $1 myusername@desktop:/Users/myusername/Dropbox/Inbox

它允许我运行一个命令,比如:

scpdropbox file.name

因为我已经在所有节点和我的外部计算机(桌面)之间设置了ssh密钥,所以我希望这个文件最终能在上面运行,所以它运行得很好。当然,只有当我从connectedNode运行它时,这才有效,否则,该命令将失败,因为工作节点没有连接到互联网。

如何修改此脚本,以便从workNode运行此命令,并让它通过connectedNode面

到目前为止我已经尝试过的事情(评论):

PWD=$(pwd)
# ssh myusername@connectedNode <<'ENDSSH'
# ssh -t myusername@connectedNode <<'ENDSSH'
ssh -t -t myusername@connectedNode <<'ENDSSH'
#commands to run on remote host
# scp $PWD/$1 myusername@desktop:/Users/myusername/Dropbox/Inbox
# scp '$PWD'/'$1' myusername@desktop:/Users/myusername/Dropbox/Inbox
scp $PWD/$1 myusername@desktop:/Users/myusername/Dropbox/Inbox
ENDSSH

它们不起作用。我收到的错误如下:

Pseudo-terminal will not be allocated because stdin is not a terminal.
/home/dir/myusername: not a regular file
tcgetattr: Inappropriate ioctl for device

这取决于我尝试过哪种方法。

在每个工作节点上,向~/.ssh/config文件中添加以下内容:

host desktop
   ProxyCommand ssh -xaqW%h:22 myusername@connectedNode

现在,当工作节点尝试ssh到桌面时,它将首先连接到myusername@connectedNode,然后继续ssh到桌面(%h)端口22。

我使用它允许我的工作站在没有Internet或默认路由的情况下,通过网络上的另一台机器连接到外部主机,该机器在另一个网络接口上可以访问网络。工作起来很有魅力。

请注意,如果您使用的是不支持-W选项的非常旧的ssh,您也可以使用以下选项:

host desktop
   ProxyCommand ssh -x -a -q myusername@connectedNode nc %h 22

相关内容

最新更新