1

スーパーコンピューター(CentOS)で使用するbashスクリプトがあります。このコンピューターは、インターネットにアクセスできる単一のノード(「connectedNode」と呼びます)が存在するように設定されています。このノードを介して、他のすべてのノード(「workNodes」と呼びます)にアクセスできます。ほとんどの作業は、connectedNodeを介してworkNodeにSSH接続した後に実行されます。

私は本質的にこのワンライナーであるbashスクリプトを持っています:

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

これにより、次のようなコマンドを実行できます。

scpdropbox file.name

また、すべてのノードと外部コンピューター(デスクトップ)の間にsshキーを設定したので、このファイルを最終的に配置したいので、うまく機能します。もちろん、これは、connectedNodeから実行している場合にのみ機能します。そうでない場合、 workNodeがインターネットに接続されていないため、このコマンドは失敗します。

このスクリプトを変更して、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、次にデスクトップ(%h)ポート22へのSSHを続行します。

これを使用して、インターネットやデフォルトルートがなくても、職場のワークステーションが、別のネットワークインターフェイスでネットワークにアクセスできるネットワーク上の別のマシンを介して外部ホストに接続できるようにします。チャームのように機能します。

sshこのオプションをサポートしていない非常に古いものを使用している場合は、次の-W方法も使用できることに注意してください。

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