我有一个在超级计算机(CentOS)上使用的bash脚本。设置此计算机,以便有一个可以访问Internet的节点(称之为“ connectedNode ”) - 并通过此节点,所有其他节点(称为“ workNodes “)可以访问。大部分工作是在将 connectedNode 转换为 workNode 之后完成的。
我有一个bash脚本,基本上就是这个内容:
#!/bin/bash
# scpdropbox
scp $1 myusername@desktop:/Users/myusername/Dropbox/Inbox
允许我运行如下命令:
scpdropbox file.name
因为我在所有节点和我的外部计算机(桌面)之间设置了ssh-key,我想让这个文件最终打开,它运行得很好。当然,这仅在我从 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
取决于我尝试过的东西。
答案 0 :(得分:3)
在每个工作节点上,将以下内容添加到~/.ssh/config
文件中:
host desktop
ProxyCommand ssh -xaqW%h:22 myusername@connectedNode
现在,当worknode尝试ssh到桌面时,它将首先连接到myusername@connectedNode
,然后继续SSH到桌面(%h
)端口22。
我使用它来允许我的工作站在没有Internet或默认路由的情况下通过网络上另一台可以在另一个网络接口上具有网络访问权限的计算机连接到外部主机。像魅力一样。
请注意,如果您使用的是不支持ssh
选项的旧版-W
,则还可以使用此选项:
host desktop
ProxyCommand ssh -x -a -q myusername@connectedNode nc %h 22