同じホストハードウェアで実行されている別の仮想マシンから仮想マシンのTCPポートにアクセスするためのSSHポート転送の設定

同じホストハードウェアで実行されている別の仮想マシンから仮想マシンのTCPポートにアクセスするためのSSHポート転送の設定

想像する

私の産業用PCには2つのオペレーティングシステム(仮想マシン)があります。

  1. PLCコントローラと通信するリアルタイムオペレーティングシステム
  2. 汎用Linux(Ubuntu 20.04)の展開

2 つのオペレーティング システム間で利用可能な唯一の接続は、仮想ネットワーク経由です。

仮想ネットワーク

  • Linuxホストが192.168.3.1IPアドレスに設定されました。
  • RTOSホストが192.168.3.2IPアドレスに設定されました。

データ

8580PLCコントローラによって生成されたデータは、Linuxホストにアクセスできるポートによって制御および設定されます。つまり、192.168.3.2:8580(ポートで利用可能なRTOSでOPC-UAサーバーを実行する8580

シーン説明図

必要

8580エンドユーザーがDHCPが提供するLinuxシステムのIPアドレスを介してOPC UAサーバーからデータを読み取るためにRTOSのポートにアクセスできるように、LinuxシステムにSSHトンネルを作成したいと思います。

エンドユーザーはここからデータを読み取ることができます<IP-address-PC>:8580IP-address-PC仮想ネットワークと同じではありませんが、DHCPサーバーから)。

しかし、私は安全で予約されたセッションこのトンネルから。

安全で予約されたセッション

  • トンネルの作成時間は制限する必要があります。
  • トンネルが作成されたら、次のものを許可する必要があります。たった一度の出会い
  • セッションが終了するとトンネルは閉じます。

予備調査

私は経験したwikibooks for OpenSSH Tunneling Chapter使用すると言われています。単一の中間ホストによるトンネリングこれがトリックを行うようです

崩れる

ssh -f -g -L 8580:192.168.3.2:8580 admin@localhost sleep 60

-f:バックグラウンドでプロセスを実行する

-g:リモートユーザーがローカルポート(Linuxでは8580)にアクセスできるようにします。

-L:ローカルポート転送、RTOSで何が起こっても192.168.3.2:8580ここに転送されます。

admin@localhost:RTOSにはSSHがないことがわかったので、このトンネルを維持する唯一の方法はへの接続を維持することですlocalhost。コマンドを初めて実行するときは、まだパスワードを入力する必要があります。

sleep 60:ユーザーがサーバーに接続しようとするまで60秒間待機し、接続できない場合はトンネルを閉じます。

タイミングトンネルの問題を解決したようですsleep 60

sshd_configとセッション

1つのセッションしか使用できないようにトンネルを設定したいと思います。これを制御できますか?

上記の手順を設定でどのようにコード化できますかsshd_config一度ユーザーは誰ですかadmin

編集する

一部の特定の要件に応じて、ユーザーはssh実際にRTOSからデータを取得しようとすると上記のコマンドを手動でトリガーします。特定の状況でSSHトンネルを閉じることができるメカニズムを探しています。非アクティブ一定時間が経過した後。

ほとんどの場合、ユーザーは次のことを望むことができます。現れるOPC-UAサーバーのデータを入力して満足している場合は、セキュリティ上の理由でトンネルを閉じます。

関連情報