форк putty

А я все оптимизирую рабочее место :)
Для определенных нужд требуется мне, чтобы на удаленном сервере, сразу после моего логина по SSH, выполнялась какая-нить команда. В консольном ssh, в линуксе и в cygwin'е, это делается легко и просто - указанием команды после ssh

ssh user@server.ru "command"
Putty же по каким-то причинам так не умеет, почему - для меня загадка. Putty требует создания файла, в котором надо вписать команды, а файлик уже указать ключиком
putty user@server.ru -m file
Думая, как обойти такую незадачу, я хотел писать программу, которая создавала бы временный файл и запускала putty с ним. Потом я вспомнил, что putty же опенсорсный, и захотелось посмотреть, а как же там подключается этот файл с командами, может обмануть его можно. Нашел тут исходники, в них оказался даже проект для VC++ - думаю, а дай попробую изменить :) Открыл, посмотрел. Оказалось, что файлик открывается функцией fopen и читается по одному символу. Добавил рядом обработку ещё одного ключика -c, чтобы брал прямо команду из командной строки. Всего ничего
if (!strcmp(p, "-c")) {

RETURN(2);
UNAVAILABLE_IN(TOOLTYPE_FILETRANSFER | TOOLTYPE_NONNETWORK);
SAVEABLE(0);
cfg->remote_cmd_ptr = value;
}
начиная со строки 339 файла cmdline.c
Признаюсь, я сильно удивился, когда проект собрался сразу и без ошибок. Какие бы исходники я до этого ни качал - сразу ничего не собиралось. Пожал для полного счастья upx'ом - exe'шник стал занимать почти в два раза меньше, чем оригинальный putty, ну и заменил оригинальный своим форком :)
Теперь могу так
putty user@server.ru -c "command"
и это даже работает :)

ЗЫ Вообще я до этого пользовался kitty - это форк putty с добавлением разного функционала. Но исходники kitty собираться отказались, и подумав, я пришел к выводу, что нафик мне этот kitty нужен.

ЗЗЫ Да, это не true windows way, но что делать :)

12 comentario:

Unknown dijo...

Чего только не придумают вендузятники, лишь бы не использовать нормальную ОС

yumaa dijo...

"нормальную" - это где типа можно пересобирать используемые программы без зазрения совести?

tuupic dijo...

Нет, это где SSH-клиент нормальный.

p.s. Тупой гугл, openid реквесты кривые делает

yumaa dijo...

в cygwin'е нормальный клиент, такой же как в линуксе.
единственное, что плохо в винде, это слабая консоль. из-за которой работать в этом openssh невозможно...

vadim s. sabinich dijo...

путти морально устарела. Уже как минимум год известен форк - kitty, где реализованы различные штуки, которые были очень необходимы.

yumaa dijo...

Вадим, ты только заголовок прочитал? :)
в kitty нет ничего, что было бы мне критически необходимо. а то, что я прикрутил - мне надо. и в kitty этого нет. если я вдруг просмотрел и не нашел - покажи )

Anónimo dijo...

> в cygwin'е нормальный клиент, такой же как в линуксе.

Это то же самое, что сказать что в linux, через wine есть нормальный IE, miranda и т.п.

yumaa dijo...

это совсем не то же самое. в cygwin приложения портированные (ну не совсем портированные, но как минимум бинарно несовместимые с никсовыми, и запускаются без всякой прослойки), а в wine запускаются бинарники из windows.

Anónimo dijo...

Ссылка на скачать-то где?

Anónimo dijo...

cygwin - это уже и есть прослойка.
Причём, именно абсолютно аналогичная wine(только в обратную сторону), транслирует системные вызовы POSIX в функции winAPI.
И в wine также есть встроенные "бинарно совместимые" notepad и сапёр

yumaa dijo...

какой популярный пост :)
siberex, лично в руки :) он только не такой красивый, как kitty, манифеста в нем нету...
tuupic, да, только на уровне компиляции. приложения работают в винде в виде бинарного исполняемого кода.

yumaa dijo...

ещё чуть чуть код поправил :)
чтобы putty ключики не спрашивал - на все security alert всегда отвечает yes

 

Design in CSS by TemplateWorld and sponsored by SmashingMagazine
Blogger Template created by Deluxe Templates