1

我有一个在超级计算机 (CentOS) 上使用的 bash 脚本。这台计算机的设置使得有一个可以访问互联网的节点(称为“ connectedNode ”)——并且通过该节点,可以访问所有其他节点(称为“ workNodes ”)。大部分工作是在通过connectedNode ssh-ing到workNode之后完成的。

我有一个 bash 脚本,它本质上是一个衬里:

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

这允许我运行如下命令:

scpdropbox file.name

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

如何修改此脚本,以便我可以从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

取决于我尝试过的事情。

4

1 回答 1

3

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

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

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

我使用它来允许我的工作站在没有 Internet 或默认路由的情况下通过网络上的另一台机器连接到外部主机,该机器在另一个网络接口上具有网络访问权限。奇迹般有效。

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

host desktop
   ProxyCommand ssh -x -a -q myusername@connectedNode nc %h 22
于 2012-08-31T05:08:13.427 回答