ローカルコンピューターの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コマンドを実行する前に成功したと表示されます)。
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