Подключение по ssh без необходимости вводить пароль

Как-то мне понадобилось, чтобы одна linux машина (клиент) могла подключатся к другой (сервер) по протоколу ssh без необходимости ввода пароля. Инфы о том, как это сделать — куча. В данном посте я повторяю то что уже написано множество раз, я это делаю чтобы закрепить знания и иметь под рукой краткую, удобную для меня инструкцию.

Итак, есть клиент (linux машина), который должен подключатся к серверу (linux машина с работающим ssh демоном). При подключении сервер не должен спрашивать у клиента пароль.

На клиенте запускаю комманду, которая сгенерит файл с откртым ключем ~/ssh/id_rsa.pub и с файл с закрытым ключем ~/ssh/id_rsa:
ssh-keygen -t rsa

Копирую открытый ключ с клиент на сервер:
scp ~/.ssh/id_rsa.pub host.local:/home/user/.ssh/authorized_keys2

Все =) Теперь если на клиенте набрать ssh host.local то подключение по ssh пройдет без необходимости вводить пароль.

Tags:

Thursday, January 15th, 2009 Uncategorized Comments Off

tail -f с фильтром

Очень удобно смотреть некоторые логи с помощью tail -f logfile — на экране показывается в real time все попадающее в лог файл. Но когда в файл записывается ну слишком много всего и вывод совершенно невозможно читать.

Хочется иметь возможность фильтровать вывод, но так же получать его на экран в режиме реального времени. Как оказалось — это очень просто:


root@mail:/var/log# tail -f mail.log|grep “connect from”
Dec 23 12:09:35 mail postfix/smtpd[1940]: connect from unknown[A.B.C.D]
Dec 23 12:09:36 mail postfix/smtpd[1938]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:36 mail postfix/smtpd[2522]: connect from host[A.B.C.D]
Dec 23 12:09:36 mail postfix/smtpd[1955]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:37 mail postfix/smtpd[2513]: connect from host[A.B.C.D]
Dec 23 12:09:37 mail postfix/smtpd[2502]: connect from unknown[A.B.C.D]
Dec 23 12:09:37 mail postfix/smtpd[1432]: disconnect from host[A.B.C.D]
Dec 23 12:09:38 mail postfix/smtpd[1367]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:38 mail postfix/smtpd[1977]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:38 mail postfix/smtpd[1940]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:39 mail postfix/smtpd[2455]: disconnect from unknown[A.B.C.D]
Dec 23 12:09:39 mail postfix/smtpd[2471]: disconnect from unknown[A.B.C.D]

Но иногда хочется ставить не один фильтр, а несколько. Но, как выясняется, несколько грепов подряд — не работает. Решение так же существует и оно очень простое — у всех грепов, кроме последнего добавляется параметр — –line-buffered:


root@mail:/var/log# tail -f mail.log|grep –line-buffered “connect from”|grep -v “disconnect”
Dec 23 12:13:04 mail postfix/smtpd[1941]: connect from host[A.B.C.D]
Dec 23 12:13:04 mail postfix/smtpd[2455]: connect from host[A.B.C.D]
Dec 23 12:13:05 mail postfix/smtpd[1955]: connect from unknown[A.B.C.D]
Dec 23 12:13:06 mail postfix/smtpd[1980]: connect from host[A.B.C.D]
Dec 23 12:13:06 mail postfix/smtpd[1940]: connect from unknown[A.B.C.D]
Dec 23 12:13:07 mail postfix/smtpd[1978]: connect from host[A.B.C.D]
Dec 23 12:13:07 mail postfix/smtpd[2502]: connect from unknown[A.B.C.D]
Dec 23 12:13:09 mail postfix/smtpd[2513]: connect from unknown[A.B.C.D]
Dec 23 12:13:11 mail postfix/smtpd[1432]: connect from host[A.B.C.D]

PS найдено на форуме убунту.

Tags:

Wednesday, December 24th, 2008 Uncategorized Comments Off

Perl процедура для обновления wiki страниц trac-а

Я очень люблю и много пользуюсь системой trac. У меня появилась необходимость обновлять вики страницы трака из внешних программ. Я написал крохотную процедуру на perl, чтобы это делать (и впервые воспользовался pod для ведения документации =):

PERL:
  1. #! /usr/bin/perl
  2.  
  3. use strict;
  4. use warnings;
  5. use DBI;
  6.  
  7. =head2 Структура таблицы wiki в траке
  8.  
  9.  CREATE TABLE wiki (
  10.     name text,
  11.     version integer,
  12.     time integer,
  13.     author text,
  14.     ipnr text,
  15.     text text,
  16.     comment text,
  17.     readonly integer,
  18.     UNIQUE (name,version)
  19. );
  20. CREATE INDEX wiki_time_idx ON wiki ( time);
  21.  
  22. =cut
  23.  
  24. =head2 sub write_wiki_trac
  25.  Процедуре передаются параметры:
  26.  
  27.   file - файл с базой данных trac
  28.   name - название страницы
  29.   author - кто будет автором редакции страницы
  30.   text - текст, который будет размещен на странице
  31.  
  32.  Процедура создает страницу, если страницы с таким именем нет.
  33.  Время создания страницы выставляется текущее время.
  34.  Процедура записывает новую редакцию страницы, если text не соответствует последней радакчии.
  35.  Если текст полностью идентичен последней редакции, то процедура ничего не изменяет в базе.
  36.  
  37. =cut
  38.  
  39.  
  40. sub write_wiki_trac {
  41.     my ($file, $name, $author, $text) = @_;
  42.    
  43.     my $dbh = DBI->connect("dbi:SQLite:dbname=$file","","", { RaiseError => 1, PrintError => 0 }) or die "Failed to connect to SQLite filesystem digest cache database at $file: " . DBI->errstr;
  44.  
  45.     $dbh->{unicode} = 1;
  46.  
  47.     # Нахожу последнюю версию страницы
  48.     my $sth = $dbh->prepare("SELECT * FROM wiki WHERE name='$name' ORDER BY version DESC LIMIT 1");
  49.  
  50.     $sth->execute();
  51.  
  52.     my $result = $sth->fetchrow_hashref;
  53.  
  54.     # Несколько дурацких строк ниже, чтобы избавится от warning "Use of uninitialized value in concatenation"
  55.     my $text_db;
  56.     if ( $result->{text} ) {
  57.         $text_db = $result->{text};
  58.     } else {
  59.         $text_db = "";
  60.     }
  61.  
  62.     # Записываем только если текст отличается от того, который сейчас в бд
  63.     if ( $text_db ne $text ) {
  64.  
  65.         my $version;
  66.        
  67.         unless ( $result->{version} ) {
  68.             $version = 1;
  69.         } else {
  70.             $version = $result->{version}+1;
  71.         }
  72.  
  73.         my $time = time();
  74.         $sth = $dbh->prepare("INSERT INTO wiki (name, version, time, author, text, ipnr, readonly, comment) VALUES ('$name', '$version', $time, '$author', '$text', '127.0.0.1', 0, '')");
  75.         $sth->execute();
  76.     }
  77.  
  78.     return 1;
  79. }
  80.  
  81.  
  82. # проверка работы процедуры:
  83. my $file = "/var/trac/test/db/trac.db";
  84. &write_wiki_trac($file, "SandBox", "tester", "New page content");

Tags: ,

Friday, December 19th, 2008 Uncategorized Comments Off

Обновление chess.bessarabov.ru

Небольшое обновление моего проекта chess.bessarabov.ru:

  1. Появилось список, в котором отображаются ходы (кстати, при подведении мышки к последнему ходу в списке, ход будет показан на доске)
  2. Появилась форма обратной связи — теперь можно писать мне из нее, а не только по email
  3. В заголовке страницы теперь пишется информация о том, чей сейчас ход — это удобно, когда кроме шахмат открыто еще несколько вкладок, теперь очень легко понять, пошел ли противник

Tags: ,

Wednesday, December 10th, 2008 Uncategorized Comments Off

Форма обратной связи на delicious.com

У сайта delicious.com есть форма обратной связи. Форма вполне обычная, но меня очень порадовала идея, где сохранять информацию о пользователей|, который отписал нечто на этой форме: сохранять в подписе письма:


Original Message Follows:
--------------------------------------
Username: bessarabov
Email: ivan@bessarabov.ru

Message:

Here was my message, whitch I don't wan't to show on public.
--
Originating IP address: 83.167.111.59
Browser Info: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.1.17) Gecko/20080827 Iceweasel/2.0.0.17 (Debian-2.0.0.17-0etch1)

Tuesday, December 2nd, 2008 Uncategorized Comments Off

Быстрый поиск в firefox 3 без учета регистра

В firefox есть безумно убная комбинация клавиш (точнее одна клавиша): "'" (одинчная кавычка).

При нажатии на эту кнопку открывается так называемый быстрый поиск по ссылкам. Это безумно удобно. Рассказать, что это такое проще всего на примере.

Итак:
Я нахожусь в браузере и хочу срочно найти описание css свойства border. Вот что я делаю:

  • Ctrl+L — перехожу в адресную строку
  • набираю http://htmlbook.ru (отличный сайт, кстати)
  • enter — перехожу на сайт
  • ' (нажимаю мизинцем на одиночную кавычку) — открывается окно быстрого поиска
  • ввожу border
  • enter — перехожу на нужную мне страницу

Еще раз повторюсь, что это безумно удобно. Рекомендую всем использовать.

Но пост не об этом. =)

В firefox2 все работает отлично. В firefox3 этот поиск стал зависеть от регистра (во второй версии этого не было). Это неудобно. Очень.

Некоторое время (сколько тут прошло с момента релиза firefox3) я мирился с этим, но в конце концов меня это достало и я решил разобраться, как это исправить.

Решение совершенно без проблем нашлося в интернете. Открывается в firefox3 настройки (набирается about:config в адресной строке), там находится параметр accessibility.typeaheadfind.casesensitive и он выставляется в 0.

Tags:

Thursday, November 27th, 2008 Uncategorized Comments Off

Твистер на iPhone

Вот только ради этого стоит купить iPhone: http://www.appsafari.com/games/6890/knots/!

Wednesday, November 26th, 2008 Uncategorized Comments Off

Dynamic constrast

Купил себе недавно новый монитор ( Samsung SyncMaster 245B), — неделю на него ругался, что когда сменятся якрость изображения, изменяется уровень подсветки.

А тут выяснил, что это не баг, а фича, называется Dynamic Contrast и прекрасно выключается через менюшку. =)

Теперь я полностью монитором доволен, но остается вопрос, зачем вообще такая функция нужна? Лично мне она не нравится ни в работе, ни при просмотре фильмов.

Tags: ,

Monday, November 24th, 2008 Uncategorized Comments Off

Пожелания к диктофону

Некоторое время назад, я решил купить себе диктофон. Перед тем, как его купить, я сел и написал список требований. Вот, что я хотел получить от диктофона:

Форм фактор

  • Небольшой, чем меньше и легче, тем лучше, но формы именно диктофона
  • Большая кнопка, на которую удобно нажимать большим пальцем

Тех характеристики

  • цифровой
  • эл питания. не больше 2х батареек AA или ААА (именно батареек, чтобы можно было вставить аккумуляторы).
  • время работы на запись 3 часа
  • хранит не меньше 3х часов записи
  • запись в mp3
  • доступ к записанным файлам с компьютера (чтобы работал, как обыкновенная флешка - примонтировал и работать как с файловой системой)
  • все записи хранит в файлах - имя файла время записи, файл находится в папке дата записи
  • подключение к компу через miniusb или еще лучше, крэдл
  • при отсутствии питания, запись не пропадает (достал батарейки, запись все равно хранится)
  • возможность прослушивать записи через наушники (т.е. наличие раьзема mini jack)
  • 2 возможности включить запись: 1. держать кнопку и в это время проговорить несколько слов, либо 2. нажать на кнопку и отпустить, тогда он войдет в режим записи и будет писать, пока не будет нажата кнопка повторна
  • цена: до 5-и тысяч

Список этот я написал, не зная ничего о диктофонах и никогда ими не пользуясь. Диктофон я купил. В следующих постах я расскажу, что из моих хотелок сбылось.

Tags:

Sunday, November 23rd, 2008 Uncategorized Comments Off

Хауту багрепорт

Илья Бирман написал соверешнно замечательные примеры того, как писать багрепорты.

Структура его багрепортов следующая:

  1. Краткое описание проблемы
  2. Алгоритм того, что нужно сделать, чтобы баг проявил себя
  3. Описание того что получилось
  4. Описание того, что нужно было получить

Конечно этот алгоритм стоит использовать только в случае достаточно сложных проблем, для простых он избыточен:

Баг: Не работает интернет
Алгоритм воспроизведения: включить компьютер, открыть firefox, набрать адрес сайта http://www.yandex.ru, нажать enter.
Получено: сообщение об ошибке о недоступности сетевого ресурса
Что необходимо получить: главную страницу сайта http://www.yandex.ru

Saturday, November 22nd, 2008 Uncategorized Comments Off