Подключение по 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 пройдет без необходимости вводить пароль.
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 найдено на форуме убунту.
Perl процедура для обновления wiki страниц trac-а
Я очень люблю и много пользуюсь системой trac. У меня появилась необходимость обновлять вики страницы трака из внешних программ. Я написал крохотную процедуру на perl, чтобы это делать (и впервые воспользовался pod для ведения документации =):
-
#! /usr/bin/perl
-
-
use strict;
-
use warnings;
-
use DBI;
-
-
=head2 Структура таблицы wiki в траке
-
-
CREATE TABLE wiki (
-
name text,
-
version integer,
-
time integer,
-
author text,
-
ipnr text,
-
text text,
-
comment text,
-
readonly integer,
-
UNIQUE (name,version)
-
);
-
-
=cut
-
-
=head2 sub write_wiki_trac
-
Процедуре передаются параметры:
-
-
file - файл с базой данных trac
-
name - название страницы
-
author - кто будет автором редакции страницы
-
text - текст, который будет размещен на странице
-
-
Процедура создает страницу, если страницы с таким именем нет.
-
Время создания страницы выставляется текущее время.
-
Процедура записывает новую редакцию страницы, если text не соответствует последней радакчии.
-
Если текст полностью идентичен последней редакции, то процедура ничего не изменяет в базе.
-
-
=cut
-
-
-
sub write_wiki_trac {
-
my ($file, $name, $author, $text) = @_;
-
-
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;
-
-
$dbh->{unicode} = 1;
-
-
# Нахожу последнюю версию страницы
-
my $sth = $dbh->prepare("SELECT * FROM wiki WHERE name='$name' ORDER BY version DESC LIMIT 1");
-
-
$sth->execute();
-
-
my $result = $sth->fetchrow_hashref;
-
-
# Несколько дурацких строк ниже, чтобы избавится от warning "Use of uninitialized value in concatenation"
-
my $text_db;
-
if ( $result->{text} ) {
-
$text_db = $result->{text};
-
} else {
-
$text_db = "";
-
}
-
-
# Записываем только если текст отличается от того, который сейчас в бд
-
if ( $text_db ne $text ) {
-
-
my $version;
-
-
unless ( $result->{version} ) {
-
$version = 1;
-
} else {
-
$version = $result->{version}+1;
-
}
-
-
$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, '')");
-
$sth->execute();
-
}
-
-
return 1;
-
}
-
-
-
# проверка работы процедуры:
-
my $file = "/var/trac/test/db/trac.db";
-
&write_wiki_trac($file, "SandBox", "tester", "New page content");
Обновление chess.bessarabov.ru
Небольшое обновление моего проекта chess.bessarabov.ru:
- Появилось список, в котором отображаются ходы (кстати, при подведении мышки к последнему ходу в списке, ход будет показан на доске)
- Появилась форма обратной связи — теперь можно писать мне из нее, а не только по email
- В заголовке страницы теперь пишется информация о том, чей сейчас ход — это удобно, когда кроме шахмат открыто еще несколько вкладок, теперь очень легко понять, пошел ли противник

Форма обратной связи на 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)
Быстрый поиск в firefox 3 без учета регистра
В firefox есть безумно убная комбинация клавиш (точнее одна клавиша): "'" (одинчная кавычка).
При нажатии на эту кнопку открывается так называемый быстрый поиск по ссылкам. Это безумно удобно. Рассказать, что это такое проще всего на примере.
Итак:
Я нахожусь в браузере и хочу срочно найти описание css свойства border. Вот что я делаю:
- Ctrl+L — перехожу в адресную строку
- набираю http://htmlbook.ru (отличный сайт, кстати)
- enter — перехожу на сайт
- ' (нажимаю мизинцем на одиночную кавычку) — открывается окно быстрого поиска
- ввожу border
- enter — перехожу на нужную мне страницу
Еще раз повторюсь, что это безумно удобно. Рекомендую всем использовать.
Но пост не об этом. =)
В firefox2 все работает отлично. В firefox3 этот поиск стал зависеть от регистра (во второй версии этого не было). Это неудобно. Очень.
Некоторое время (сколько тут прошло с момента релиза firefox3) я мирился с этим, но в конце концов меня это достало и я решил разобраться, как это исправить.
Решение совершенно без проблем нашлося в интернете. Открывается в firefox3 настройки (набирается about:config в адресной строке), там находится параметр accessibility.typeaheadfind.casesensitive и он выставляется в 0.
Твистер на iPhone
Вот только ради этого стоит купить iPhone: http://www.appsafari.com/games/6890/knots/!
Dynamic constrast
Купил себе недавно новый монитор ( Samsung SyncMaster 245B), — неделю на него ругался, что когда сменятся якрость изображения, изменяется уровень подсветки.
А тут выяснил, что это не баг, а фича, называется Dynamic Contrast и прекрасно выключается через менюшку. =)
Теперь я полностью монитором доволен, но остается вопрос, зачем вообще такая функция нужна? Лично мне она не нравится ни в работе, ни при просмотре фильмов.
Пожелания к диктофону
Некоторое время назад, я решил купить себе диктофон. Перед тем, как его купить, я сел и написал список требований. Вот, что я хотел получить от диктофона:
Форм фактор
- Небольшой, чем меньше и легче, тем лучше, но формы именно диктофона
- Большая кнопка, на которую удобно нажимать большим пальцем
Тех характеристики
- цифровой
- эл питания. не больше 2х батареек AA или ААА (именно батареек, чтобы можно было вставить аккумуляторы).
- время работы на запись 3 часа
- хранит не меньше 3х часов записи
- запись в mp3
- доступ к записанным файлам с компьютера (чтобы работал, как обыкновенная флешка - примонтировал и работать как с файловой системой)
- все записи хранит в файлах - имя файла время записи, файл находится в папке дата записи
- подключение к компу через miniusb или еще лучше, крэдл
- при отсутствии питания, запись не пропадает (достал батарейки, запись все равно хранится)
- возможность прослушивать записи через наушники (т.е. наличие раьзема mini jack)
- 2 возможности включить запись: 1. держать кнопку и в это время проговорить несколько слов, либо 2. нажать на кнопку и отпустить, тогда он войдет в режим записи и будет писать, пока не будет нажата кнопка повторна
- цена: до 5-и тысяч
Список этот я написал, не зная ничего о диктофонах и никогда ими не пользуясь. Диктофон я купил. В следующих постах я расскажу, что из моих хотелок сбылось.
Хауту багрепорт
Илья Бирман написал соверешнно замечательные примеры того, как писать багрепорты.
Структура его багрепортов следующая:
- Краткое описание проблемы
- Алгоритм того, что нужно сделать, чтобы баг проявил себя
- Описание того что получилось
- Описание того, что нужно было получить
Конечно этот алгоритм стоит использовать только в случае достаточно сложных проблем, для простых он избыточен:
Баг: Не работает интернет
Алгоритм воспроизведения: включить компьютер, открыть firefox, набрать адрес сайта http://www.yandex.ru, нажать enter.
Получено: сообщение об ошибке о недоступности сетевого ресурса
Что необходимо получить: главную страницу сайта http://www.yandex.ru
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « Jun | ||||||
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | ||||