четверг, 7 февраля 2013 г.

Решение проблемы с установкой пакетов через apt на свежеустановленном Debian.

Итак, на машину только что установлена система с первого диска Debian. Обновляем список пакетов командой:
root@webserver:/home/kutsd# apt-get update
После этого пытаемся поставить что-либо командой:
root@webserver:/home/kutsd# apt-get install mc
На что получаем ошибку следующего типа:

root@webserver:/home/kutsd# apt-get install mc
Чтение списков пакетов... Готово
Построение дерева зависимостей       
Чтение информации о состоянии... Готово
Будут установлены следующие дополнительные пакеты:
  libglib2.0-0 libglib2.0-data shared-mime-info
Предлагаемые пакеты:
  zip unzip bzip2 arj xpdf-reader pdf-viewer dbview odt2txt gv catdvi djvulibre-bin imagemagick python-boto python-tz
НОВЫЕ пакеты, которые будут установлены:
  libglib2.0-0 libglib2.0-data mc shared-mime-info
обновлено 0, установлено 4 новых пакетов, для удаления отмечено 0 пакетов, и 0 пакетов не обновлено.
Необходимо скачать 2 173 kB/5 039 kB архивов.
После данной операции, объём занятого дискового пространства возрастёт на 16,7 MB.
Хотите продолжить [Д/н]? y
Смена носителя: вставьте диск с меткой
 'Debian GNU/Linux 6.0.6 _Squeeze_ - Official i386 CD Binary-1 20120929-15:56'
в устройство '/media/cdrom/' и нажмите ввод
Все дело в том, что система считает что у нас есть весь набор дисков и пытается установить ПО с диска. Для того, чтобы запретить ей искать ПО на дисках, а качать его из интернета необходимо в файле /etc/apt/sources.list закомментировать любые строчки источником cdrom. В моем случае это была строка:
deb cdrom:[Debian GNU/Linux 6.0.6 _Squeeze_ - Official i386 CD Binary-1 20120929-15:56]/ squeeze main
После этого надо еще раз обновить список пакетов и можно устанавливать пакеты из сети.

пятница, 1 февраля 2013 г.

Выполнение команд на удаленном сервере

Я писал скрипт бэкапа данных с удаленного сервера и столкнулся с проблемой. Вот строчки скрипта:

ssh testuser@192.168.0.188 
cd testdir
Как мне казалось, тут нет никакой ошибки. Однако первый же запуск окончился неудачей. Как оказалось, ssh устанавливает соединение и сразу же передает управление консоли удаленного сервера. Однако скрипт-то запущен на локальной машине! Поэтому нас встречает приглашение от удаленного сервера. Завершив сеанс ssh по Ctrl+C, я смог наблюдать как команды скрипта выполнялись дальше. Но на локальной машине, а не на удаленной.
Я нашел выход следующим образом: ssh может выполнять указанную команду самостоятельно, при этом он открывает соединение, выполняет команду и закрывает соединение. Поскольку команд у меня несколько, я обернул их в скрипт и запускаю его следующим образом:
ssh testuser@192.168.0.188 ./backupserv.sh

Беспарольный вход по ключу на удаленный сервер по ssh

Иногда может быть удобно авторизовываться на удаленном сервере по ключу, а не по паролю. Это, например, может понадобиться при создании скриптов для работу с удаленны сервером. Инструкция:
1. Генерируем новый ключ:
kutsd@kutsd-desktop:~$ ssh-keygen -t rsa -b 4096
Главное на этом шаге - не указывать passphrase. Иначе его будут требовать при подключении к удаленному серверу. Те же неудобства, что и при вводе пароля.
2. Заливаем публичный сгенерированный ключ на удаленный сервер:
kutsd@kutsd-desktop:~$ ssh-copy-id testuser@192.168.0.188
Это единственный шаг, где у нас спросят пароль от удаленной машины.
3. Пробуем подключиться:
kutsd@kutsd-desktop:~$ ssh 'testuser@192.168.0.188'

Если все-таки появляется требование ввода пароля - поможет ключ -vvv для ssh. Он покажет полную отладочную информацию, в том числе и то, на каком этапе авторизация обламывается.