我有一个在超级计算机 (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
取决于我尝试过的事情。