web-dev-qa-db-ja.com

ポート転送のためにssh接続を開始し、クライアントのコンピューターでvncビューアーを実行するためのスクリプト

ローカルコンピューターのIP(sshサーバーのネットワーク上)を引数として取得し、クライアントのコンピューターのポート5900をサーバーネットワークのそのip:5900に転送するスクリプトを記述したいと思います。

接続が確立された直後に、vncビューアを実行し、転送されたポートを使用してそのリモートホストに接続します。

私が思いついたスクリプトは次のとおりです。

#/bin/bash
ssh -L 5900:${1}:5900 user@server-ip
vncviewer 127.0.0.1:5900

そして、それはそのように使用されるべきです:
サーバーのネットワーク上にip 10.0.0.10のコンピューターがあり、コマンドを実行するとします。

vnc-ssh-script 10.0.0.10

私のホーム(クライアント)コンピューターでvncビューアーを開き、ローカルネットワークコンピューター10.0.0.10(もちろんvncサーバーを実行)を制御できるようになっています。

唯一の問題は、スクリプトの最初の行が実行された後(ssh -L 5900:$ {1}:5900 user @ server-ip)、接続が確立され、次のコマンド(vncviewer 127.0.0.1:5900)が実行されないことですsshセッションが終了するまで実行される...

私の質問は、私が望むタスクをどのように確立できますか?

私はすでにsshコマンドの後に「&」を追加しようとしましたが、スクリプトを実行するとメッセージが表示されます:
"stdinは端末ではないため、擬似端末は割り当てられません。"
sshは自動的に閉じられるようです(動作したとしても、vncviewerコマンドを実行する前に成功したと表示されます)。

2
rboy

SSH接続をバッ​​クグラウンドで固定する必要があります。コマンドの最後のアンパサンドがそれを行い、リモートエンドで実行されているシェルを停止するためにNフラグも渡しています(いくつかのリソースを節約し、SSHがコンソールを接続することについてだらしないようにします):

#/bin/bash
ssh -NL 5900:${1}:5900 user@${1} &
sleep 1
vncviewer 127.0.0.1:5900

以前は似たようなことをしていましたが、オンデマンドでリモートコンピューターでx11vncを実行していました。これには、x11vncの実行中にのみ起動するという追加の副作用がありました...そして、最初の切断後に終了します(望ましい!):

#/bin/bash
ssh -L 5900:${1}:5900 user@${1} "x11vnc" &
vncviewer 127.0.0.1:5900
0
Oli