PuTTY からローカル Windows マシン上でスクリプトを実行できますか?

PuTTY からローカル Windows マシン上でスクリプトを実行できますか?

私はコマンドラインのTwitterクライアントを使用しています。TTYtterLinux ボックス上の PuTTY を介して。多くのツイートにはリンクが含まれているため、/urlURL を開くコマンドがあります。このコマンドは、特定のツイート内の URL を検索し、ローカルでコマンドを実行して、その URL でブラウザーを起動します (例: open %UMac またはfirefox -new-tab %ULinux)。

私の質問:PuTTY セッション内から実行して、ローカル (Windows 7) マシンで URL を開くことができるコマンドはありますか? 言い換えると、PuTTY の SSH セッション内から、SSH セッションの外部にローカル マシンにアクセスする方法はありますか?

編集: 別のアプローチ:PuTTY と Windows SSH デーモンまたは Cygwin などの組み合わせを使用して、ローカル ボックス (ループバック) に SSH 接続し、タブを開くようにトリガーできるものはありますか? 私は多重化のために tmux を使用しているので、すべてのものを 1 つの Putty ウィンドウにまとめることが目標です。

答え1

PuTTYはSSH経由でローカルマシンに接続しない限り、ローカルアプリケーションの起動をサポートしていません。1つのオプションは、シグウィンWindows ボックスにインストールし、そこに TTYtter をインストールします。基本的に、TTYtter は Perl スクリプトのコレクションであり、Perl もインストールされていると仮定すると、Cygwin でも正常に動作するはずです。

答え2

おそらく、これは多くの場合うまくいかないでしょうが、私が思いついた方法は次のとおりです。

  1. 受信 URL をリッスンするサービスをホスト マシン上で実行します。

    私はノードJSここでは特に理由はありません。ほとんどの一般的なスクリプト言語が機能すると確信しています。

    var http = require('http'),
      querystring = require('querystring'),
      cp = require('child_process'),
      ip = '127.0.0.1',
      port = 9090,
      links_opened = 0;
      //urlopen curl --data "url=%U" 10.0.2.2:9090 %U  <- cmd for ttytter
    http.createServer(function (req, res) {
      if (req.method == 'POST') {
        req.on('data', function(chunk) {
      //get URL
          var _post = querystring.parse(chunk.toString()),
          //url has extra quotes for some reason:
            url_to_open = _post.url.match(/^'(.*)'$/)[1],
          //these three lines are just for nicely numbered console history (up to 999)
            link_ind = ++links_opened + ".",
            ln = link_ind + Array(5 - link_ind.length).join(' ');//pad it
            console.log( ln + url_to_open);
      //open tab
          cp.spawn('c:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe', ['-new-tab', url_to_open]);
        });
      }
    
      req.on('end', function() {
        //respond w/204 (success, no output)
        res.writeHead(204);
        res.end();
      });
    }).listen(port, ip);
    console.log('Server running at http://' + ip + ":" + port);
    
  2. ホストからゲストに URL を送信します (cURL を使用しました)。

    私のでは.ttytterrc、urlopenオプションを次のように定義しています: urlopen curl --data "url=%U" 10.0.2.2:9090 %U(%UはURLに展開されます:url開く)。

/url <ツイート ID> を呼び出すと、ホスト マシンにリクエストが送信され、ノード サービスによって現在のブラウザー ウィンドウに新しいタブが開きます。潜在的なセキュリティ上の問題が多数あることは確かですが、適切なファイアウォール設定、nodeJS スクリプトでの IP チェックなどが行われていれば、これらは致命的な問題にはなりません。とにかく、私の環境ではうまくいきました。

関連情報