
Я использую клиент командной строки Twitter,TTYtter, через PuTTY на Linux-боксе. Многие твиты содержат ссылки, поэтому есть команда /url
для открытия URL-адресов, которая ищет URL-адреса в указанном твите и локально запускает команду для запуска браузера с этим URL-адресом (например, open %U
на Mac или firefox -new-tab %U
Linux).
Мой вопрос:Есть ли команда, которую я могу запустить из сеанса PuTTY, чтобы открыть URL-адрес на моем локальном компьютере (Windows 7)? Другими словами: есть ли способ из сеанса SSH в PuTTY выйти за пределы сеанса SSH на локальную машину?
EDIT: Другой подход:Существует ли какая-либо комбинация PuTTY и демона Windows SSH или Cygwin или чего-то еще, что я мог бы использовать для подключения по SSH к своему локальному компьютеру (loopback) и открытия вкладки? Я использую tmux для мультиплексирования, поэтому моя цель — разместить все свои данные в одном окне Putty.
решение1
PuTTY не поддерживает запуск локальных приложений, если, конечно, вы не подключены по SSH к локальной машине. Один из вариантов — установитьCygwinна вашем компьютере с Windows и установите TTYtter там. По сути TTYtter — это набор скриптов Perl, и он должен нормально работать на Cygwin, если у вас также установлен Perl.
решение2
Возможно, во многих случаях это не сработает, но вот что у меня получилось:
Запустите на хост-компьютере службу, которая прослушивает входящие URL-адреса.
я использовалNodeJSздесь без какой-либо особой причины; я уверен, что большинство популярных скриптовых языков подойдут.
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);
Отправка URL-адресов с хоста на гостевую систему (я использовал cURL).
В моем
.ttytterrc
, я определяю опцию urlopen следующим образом:urlopen curl --data "url=%U" 10.0.2.2:9090 %U
(%U расширяется до URL: см.urlopen).
Я вызываю /url <tweet ID>, он отправляет запрос на мою хост-машину, и служба node открывает новую вкладку в моем текущем окне браузера. Я уверен, что здесь есть множество потенциальных проблем безопасности, но при правильных настройках брандмауэра, проверках IP в скрипте nodeJS и т. д. они не являются помехой. В любом случае, у меня это работает!