VNC、SSH、Superglueのアナログチームビューアー

Teamviewerはすべての人に適していますが、商業目的に限られ、一部の人には無料ではありません。思い出させることに飽きません...とにかく、ライセンスに違反するのは良くありません

しかし、クイックサポートを開始することの利便性は印象的です。クライアントが小さなプログラムを起動し、電話と出来事の番号を指示すると、デスクトップが表示されます。 VPN、ポート転送、その他のプリセットはありません。 便利ですか?

VNCは無料のアナログとして非常に適しており、コールバック接続で十分に受け入れられますが、多くのクライアントがあり、複数のクライアントがしがみついているコンピューターの場合にのみ、同じ問題が始まります(さらに解決されますが)。 私はチームビューアーのアイデアが個人的に好きです。 そして、あなたがそれを好めば、あなたの実装をしてみませんか...



すぐに予約します。提案されたソリューションはまったく解決策ではなく、アイデアの実装は「試してみる」ために実行されましたが、その作業能力を証明し、時間の経過とともに改善と利便性を追加できます。

そのため、winvnc(tightvnc)をベースにして、それにリバースSSHトンネルを固定し、ポート番号などでクライアントを決定します。 以下が必要です。
OpenSSHサーバー(Linuxなど)、Webサーバー(私の場合はphpを使用)。
クライアントは、独自のwinvnc(キットからtightvnc-portableを取得しました)とPuttyパッケージのSSH plinkコンソールクライアントを使用します。

リモートサポートクライアントのアルファ版には余計なものはありません(また、余計なものもありません)。 サーバーは次のようになります。



顧客の場合:
起動時に、クライアントはサーバーにトンネル情報を要求する必要があります。
定義済みの設定でwinvncを実行する
受信した設定でSSHトンネルを上げます。

続行:

私はapache2 + php + OpenSSHの実行の問題を掘り下げません。これはすべて既に存在すると仮定します。
vncユーザーを追加します。

$ sudo useradd -M -s /bin/false vnc 

デフォルトのシェルをオーバーライドすることは必須です。そうしないと、スマートな誰かがサーバーにログインできます。

パスワードを割り当てます。
 $ sudo passwd vnc 

任意のパスワード、それはまだクリアのどこかにあります。

sshd_config(/ etc / ssh / sshd_config)で、オプションを追加して、すべてのネットワークインターフェイスでポートを開きます。
 GatewayPorts=yes 


これがないと、トンネルはアドレス127.0.0.1(サーバー側から)で開き、追加のシャーマニズムなしではリモートで使用できません。 OpenSSHを再起動します

$ sudo service ssh restart

plinkを実行し、報告する必要のあるマジックナンバーについてクライアントに通知するcmdスクリプトの形式でクライアントに設定を転送することが考えられていました。 これは、次の形式のPHPスクリプト(または便利なもの)によって行われます。

 <?php $server = 'mysshserver.com'; //  OpenSSH  $user = 'vnc'; //    $password= '123'; //     $ssh_port=22; //    SSH $vnc_port=11111; //     VNC- $port_start = 40000; //   $port_end = 50000; $ports = NULL; //   $r = exec("netstat -lnt4 | tail -n +3 | awk 'BEGIN{FS=\"[: ]+\"}{print $5;}' | sort -n", $ports); //     do { $port = rand($port_start, $port_end); if(!in_array($port, $ports)) break; } while (1); // cmd- header("Content-type: text/plain;"); echo "@echo off\r\n"; echo "title Port number is: $port\r\n"; echo "start /MIN cscript mb.vbs \"Port number is: $port\"\r\n"; echo "plink.exe -N -R $port:localhost:$vnc_port -P $ssh_port -pw $password -l $user -batch $server \r\n" ?> 


ファイアウォールのアクセス許可を追加します。
 #    iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT #    vnc itpables -A OUTPUT -m owner --uid-owner `id -u vnc` -j REJECT #     40000-50000 itpables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT   ( -,  SSH, HTTP -,  ): itpables -P INPUT DROP itpables -A INPUT -p tcp —dport 22 -j ACCEPT itpables -A INPUT -p tcp —dport 80 -j ACCEPT 


それでは、クライアント用のパッケージの作成を始めましょう。 以下が含まれます。
winvnc(再び、パッケージからtightVNCポータブル取得しました)および必要なライブラリ
パテから点滅
Windows用のwget (バイナリと依存関係)
winvncのregファイルとplinkの設定。 後者は、レジストリに承認済みのSSHキーを本当に必要としているため、インタラクティブに追加しない方法はありません。

レジストリの大切な部分を取得するには、Puttyを実行してSSHサーバーにしがみつき、キーを受け入れてレジストリをエクスポートします。

 reg export HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\SshHostKeys keys.reg 


winvnc設定でも同じことを行います。ベンチコンピューターで実行し、
設定した設定:
  1. [サーバー]タブのパスワードまたは空欄
  2. そこでポート番号を設定し、11111(PHPスクリプトのみで使用)を設定します。
  3. [管理]タブで、パスワードが空白の場合にループバック接続を有効にし、その使用を許可します。
  4. さて、HTTPサーバーをオフにしてください。この場合は使用されません。

適用、クローズ、エクスポート:
 reg export HKEY_CURRENT_USER\Software\ORL\WinVNC3 winvnc.reg 


指定されたテキストを含むメッセージボックスを表示するvbスクリプトを追加します。
mb.vbs:
 Set objArgs = WScript.Arguments messageText = objArgs(0) MsgBox messageText 


そして、すべてを接続する最も重要なスクリプト:
runme.cmd:

 winvnc.exe -kill reg import host-key.reg reg import winvnc.reg start winvnc.exe -run wget http://mysshserver.com/script.php -O tunnel.cmd && tunnel.cmd winvnc.exe -kill 


その中にwinvncをピン留めします(突然のすべてがすでに機能していますか?)、
レジストリの一部をインポートする、
winvncを実行します
スクリプトをダウンロードし、ダウンロードされている場合は実行します。

上記のすべてを1つのフォルダーに入れて、SFXアーカイブにパックし、解凍後にこのスクリプトを起動します。WinRARSFXの場合、次のようになります。
 Silent=1 Path=%TEMP%\support SavePath Setup=%TEMP%\support\runme.cmd 


そしてクライアントに与えることができます。 起動時に、アーカイブは静かに静かに解凍され、runme.cmdスクリプトが起動します。これにより、winvncの構成、plink、トンネル起動スクリプトのダウンロード、実行、およびクライアントへのポート番号の通知が行われます。
teamviewerの場合のように、クライアントはそれを報告し、接続できます(指定されたポート番号で既にSSHサーバーに)

その結果、次のことができます。


将来の計画について:
  1. 重いwgetを削除し、通常はすべてのスクリプトをVBSに書き換えます
  2. 接続されたクライアントを追跡するためのWebベースのインターフェースを作成し、VNCファイルをダウンロードして迅速な接続を可能にします。
  3. 他に何?

Source: https://habr.com/ru/post/J137723/


All Articles