355 500 произведений, 25 200 авторов.

Электронная библиотека книг » Уильям Шоттс » Командная строка Linux » Текст книги (страница 13)
Командная строка Linux
  • Текст добавлен: 12 апреля 2017, 12:30

Текст книги "Командная строка Linux"


Автор книги: Уильям Шоттс


Жанр:

   

ОС и Сети


сообщить о нарушении

Текущая страница: 13 (всего у книги 30 страниц)

dd if=/dev/sdb of=flash_drive.img

ВНИМАНИЕ

dd – очень мощная команда. Ее название происходит от data definition (определение данных), но иногда его расшифровывают как destroy disk (уничтожить диск), потому что пользователи часто допускают ошибки в параметрах if и of. Всегда дважды проверяйте их, прежде чем нажать ENTER!

Создание образа компакт-диска

Запись на компакт-диски (CD-R или CD-RW) выполняется в два этапа: сначала нужно создать файл образа ISO, являющийся точным образом файловой системы компакт-диска, а затем записать файл образа на носитель (то есть на сам компакт-диск).

Создание образа-копии компакт-диска

Чтобы создать ISO-образ имеющегося компакт-диска, необходимо с помощью dd прочитать все блоки с данными с этого компакт-диска и скопировать их в локальный файл. Например, допустим, что у нас есть компакт-диск с дистрибутивом Ubuntu, и мы хотим создать файл ISO-образа, который потом можно будет использовать для создания нескольких копий. Вставив компакт-диск в привод CD-ROM и определив имя устройства (пусть это будет /dev/cdrom), мы сможем создать файл ISO-образа следующим способом:

dd if=/dev/cdrom of=ubuntu.iso

Этот прием также применим к дискам DVD с данными, но он не будет работать с аудиодисками, так как для хранения данных на них файловая система не используется. Если вы хотите скопировать аудиодиск, обратитесь к команде cdrdao.

что в имени твоем…

В руководствах по созданию и записи оптических дисков, таких как CDROM и DVD, которых в избытке на просторах Интернета, часто можно встретить упоминание двух программ, mkisofs и cdrecord. Эти программы были некогда частью популярного пакета cdrtools, созданного Йоргом Шиллингом (Jörg Schilling). Летом 2006-го мистер Шиллинг изменил лицензию в части, касающейся пакета cdrtools, из-за чего она, по мнению многих в сообществе пользователей Linux, стала несовместимой с GNU GPL. Как результат, на основе cdrtools был создан альтернативный проект, включающий программы wodim и genisoimage взамен cdrecord и mkisofs соответственно.

Создание образа из коллекции файлов

Создать файл ISO-образа, включающий содержимое некоего каталога, можно с помощью программы enisoimage. Для этого сначала создадим каталог со всеми необходимыми файлами для включения в образ и затем командой genisoimage создадим файл образа. Например, если предположить, что вы создали каталог ~/cd-rom-files и наполнили его файлами для записи на компакт-диск, следующая команда создаст файл образа с именем cd-rom.iso:

genisoimage -o cd-rom.iso -R -J ~/cd-rom-files

Параметр -R требует добавить метаданные расширений Rock Ridge, позволяющих использовать длинные имена файлов и права доступа к файлам в стиле POSIX. Аналогично, параметр -J включает расширения Joliet, разрешающие использовать длинные имена файлов в Windows.

Запись образа компакт-диска

После подготовки файла образа его можно записать на оптический носитель. Большинство команд, обсуждаемых ниже, применимы и для записи на носители CD-ROM и DVD.

Непосредственное монтирование файла ISO-образа

Существует один трюк, позволяющий монтировать ISO-образы, хранящиеся на жестком диске, и работать с ними, как если бы это были оптические носители. Параметр -o loop, добавленный в команду mount (вместе с обязательным параметром -t iso9660, определяющим тип файловой системы), позволяет смонтировать файл образа в дерево файловой системы, как если бы это было обычное устройство:

mkdir /mnt/iso_image

mount -t iso9660 -o loop image.iso /mnt/iso_image

В примере, приведенном выше, мы создали точку монтирования с именем /mnt/iso_image и затем смонтировали в нее файл образа image.iso. После монтирования образа с ним можно работать как с настоящим диском CD-ROM или DVD. Не забудьте размонтировать образ, когда он станет не нужен.

Очистка перезаписываемых компакт-дисков

Перезаписываемые компакт-диски CD-RW нужно стирать, или очищать, перед повторным использованием. Для этого воспользуемся командой wodim, указав ей имя устройства пишущего привода компакт-дисков и тип очистки. Программа wodim предлагает несколько типов очистки. Для минимальной (и самой быстрой) очистки следует указать тип fast:

wodim dev=/dev/cdrw blank=fast

Запись образа

Записать образ можно с помощью все той же программы wodim, указав ей имя устройства пишущего привода компакт-дисков и имя файла образа:

wodim dev=/dev/cdrw image.iso

Помимо имени устройства и файла образа программа wodim поддерживает массу дополнительных параметров. Чаще других используются параметры -v (обеспечивает вывод подробной информации в ходе записи) и -dao (выполняет запись на диск в режиме disc-at-once – диск целиком). Режим «диск целиком» следует использовать, если вы собираетесь воспроизводить диски в коммерческих целях. По умолчанию wodim использует режим track-at-once (по одной дорожке), который хорошо подходит для записи музыкальных треков.

Дополнительные сведения

Часто бывает полезно проверить целостность ISO-образа, загруженного из Интернета. В большинстве случаев распространители ISO-образов сопровождают их файлами с контрольными суммами. Контрольная сумма – это результат экзотических математических вычислений в виде числа, представляющего содержимое целевого файла. Если содержимое файла образа изменится хотя бы в одном бите, его контрольная сумма будет отличаться от указанной распространителем. Для вычисления контрольной суммы чаще всего используется программа md5sum, возвращающая уникальное шестнадцатеричное число:

md5sum image.iso

34e354760f9bb7fbf85c96f6a3f94ece   image.iso

Загрузив образ, запустите md5sum для него и сравните результат работы md5sum со значением, указанным распространителем.

Помимо проверки целостности загруженного файла, программу md5sum можно использовать для проверки вновь записанного оптического носителя. Для этого сначала вычислите контрольную сумму для файла образа, а затем – для носителя. Вся хитрость проверки носителя заключается в том, чтобы ограничить вычисления частью оптического носителя, содержащей образ. Для этого определите число 2048-байтных блоков в образе (запись на оптические носители всегда выполняется блоками по 2048 байт) и прочитайте с носителя ровно столько блоков. Для некоторых типов носителей это не обязательно. Например, компакт-диск, записанный в режиме disc-at-once, можно проверить так:

md5sum /dev/cdrom

34e354760f9bb7fbf85c96f6a3f94ece /dev/cdrom

Многие типы носителей, такие как DVD, требуют точного вычисления числа блоков. Следующий пример демонстрирует проверку целостности файла образа dvd-image.iso и диска в устройстве /dev/dvd привода DVD. Вам понятно, как работает эта команда?

md5sum dvd-image.iso; dd if=/dev/dvd bs=2048 count=$(( $(stat - c «%s» dvd-image.iso) / 2048 )) | md5sum

7 Оно гласит: «ВНИМАНИЕ: если вы создали или изменили разделы DOS 6.x, прочитайте дополнительную информацию на странице справочного руководства для команды fdisk». – Примеч. пер.

16. Сети

Когда дело доходит до сетевых возможностей, трудно представить что-то, что было бы невозможно для Linux. Linux используется для создания всех видов сетевых систем, программных компонентов и устройств, включая брандмауэры, маршрутизаторы, серверы имен, сетевые устройства хранения данных (Network-Attached Storage, NAS) и так далее и тому подобное.

Насколько обширна тема сетей, настолько же обширна коллекция команд, которые можно использовать для настройки и управления ими. Мы сосредоточим свое внимание лишь на тех из них, которые чаще всего используются на практике. В число команд, выбранных для исследования в этой главе, входят команды, используемые для мониторинга сетей и передачи файлов. Дополнительно мы исследуем программу ssh, используемую для входа в удаленные системы. В этой главе рассматриваются следующие команды:

• ping – посылает пакеты ICMP ECHO_REQUEST узлам в сети.

• traceroute – выводит трассировку маршрута пакетов к сетевому узлу.

• netstat – выводит список сетевых соединений, таблицы маршрутов, статистику интерфейсов, маскируемые соединения и сведения о членстве в широковещательных группах.

• ftp – программа передачи файлов через Интернет.

• lftp – улучшенная программа передачи файлов через Интернет.

• wget – неинтерактивный загрузчик файлов из сети.

• ssh – клиент OpenSSH SSH (программа для входа в удаленные системы).

• scp – программа безопасного копирования файлов через сеть.

• sftp – программа безопасной передачи файлов через сеть.

Далее предполагается, что вы имеете некоторые базовые знания о сетях. В нашем мире повсеместного распространения Интернета каждый пользователь компьютера должен иметь представление о том, как действуют сети, хотя бы на элементарном уровне. Для полноценного использования этой главы вы должны знать следующие термины:

• IP-адрес (адрес протокола Интернета).

• Имя хоста и домена.

• URI (Uniform Resource Identifier – унифицированный идентификатор ресурса).

ПРИМЕЧАНИЕ

Для доступа к некоторым командам из рассматриваемых ниже может потребоваться установить дополнительные пакеты (в зависимости от дистрибутива) из репозиториев вашего дистрибутива, и некоторые из них могут требовать привилегий суперпользователя.

Исследование и мониторинг сети

Даже если вы не являетесь системным администратором, бывает полезно уметь оценивать производительность и функционирование сети.

ping – передача специальных пакетов сетевым узлам

Команда ping является самой простой сетевой командой. Она посылает специальные сетевые пакеты IMCP ECHO_REQUEST указанному сетевому узлу. Большинство сетевых устройств принимает эти пакеты и отвечает на них, – это позволяет проверить сетевые соединения.

ПРИМЕЧАНИЕ

Многие сетевые устройства (в том числе и компьютеры с Linux) могут настраиваться так, чтобы игнорировать эти пакеты. Обычно это делается для повышения безопасности и отчасти – чтобы ввести в заблуждение потенциального злоумышленника. Кроме того, многие брандмауэры блокируют трафик IMCP.

Например, с помощью команды ping можно проверить достижимость сетевого узла http://www.linuxcommand.org/ (один из моих любимых сайтов ;-)):

[me@linuxbox ~]$ ping linuxcommand.org

Сразу после запуска программа ping начинает посылать пакеты с определенным интервалом (по умолчанию 1 секунда), пока ее выполнение не будет прервано:

[me@linuxbox ~]$ ping linuxcommand.org

PING linuxcommand.org (66.35.250.210) 56(84) bytes of data.

64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=1 ttl=43 time=10 7 ms

64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=2 ttl=43 time=10 8 ms

64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=3 ttl=43 time=10 6 ms

64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=4 ttl=43 time=10 6 ms

64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=5 ttl=43 time=10 5 ms

64 bytes from vhost.sourceforge.net (66.35.250.210): icmp_seq=6 ttl=43 time=10 7 ms

– linuxcommand.org ping statistics –

6 packets transmitted, 6 received, 0% packet loss, time 6010ms

rtt min/avg/max/mdev = 105.647/107.052/108.118/0.824 ms

После прерывания нажатием CTRL+C (в данном примере после шестого пакета) ping выводит результаты своей работы. Если сеть функционирует должным образом, число потерянных пакетов (packet loss) будет составлять ноль процентов. Успешная работа ping может служить признаком того, что сетевые компоненты (интерфейсные карты, кабели, маршрутизаторы и шлюзы) находятся в рабочем состоянии.

traceroute – трассировка пути сетевых пакетов

Программа traceroute (в некоторых системах используется похожая на нее программа tracepath) выводит список всех «переходов» (hops) на пути сетевого трафика между локальной системой и указанным узлом сети. Например, увидеть, как выглядит маршрут к сайту http://www.slashdot.org/, можно с помощью следующей команды:

[me@linuxbox ~]$ traceroute slashdot.org

Ее вывод выглядит примерно так:

traceroute to slashdot.org (216.34.181.45), 30 hops max, 40 byte packets

1 ipcop.localdomain (192.168.1.1) 1.066 ms 1.366 ms 1.720 ms

2 * * *

3 ge-4-13-ur01.rockville.md.bad.comcast.net (68.87.130.9) 14.622 ms 14.885 ms 15.169 ms

4 po-30-ur02.rockville.md.bad.comcast.net (68.87.129.154) 17.634 ms 17.626 ms 17.899 ms

5 po-60-ur03.rockville.md.bad.comcast.net (68.87.129.158) 15.992 ms 15.983 ms 16.256 ms

6 po-30-ar01.howardcounty.md.bad.comcast.net (68.87.136.5) 22.835 ms 14.23 3 ms 14.405 ms

7 po-10-ar02.whitemarsh.md.bad.comcast.net (68.87.129.34) 16.154 ms 13.600 ms 18.867 ms

8 te-0-3-0-1-cr01.philadelphia.pa.ibone.comcast.net (68.86.90.77) 21.951 ms 21.073 ms 21.557 ms

9 pos-0-8-0-0-cr01.newyork.ny.ibone.comcast.net (68.86.85.10) 22.917 ms 21 .884 ms 22.126 ms

10 204.70.144.1 (204.70.144.1) 43.110 ms 21.248 ms 21.264 ms

11 cr1-pos-0-7-3-1.newyork.savvis.net (204.70.195.93) 21.857 ms cr2-pos-0-0-3-1.newyork.savvis.net (204.70.204.238) 19.556 ms cr1-pos-0-7-3-1.newyork.savvis.net (204.70.195.93) 19.634 ms

12 cr2-pos-0-7-3-0.chicago.savvis.net (204.70.192.109) 41.586 ms 42.843 ms cr2-tengig-0-0-2-0.chicago.savvis.net (204.70.196.242) 43.115 ms

13 hr2-tengigabitethernet-12-1.elkgrovech3.savvis.net (204.70.195.122) 44.215 ms 41.833 ms 45.658 ms

14 csr1-ve241.elkgrovech3.savvis.net (216.64.194.42) 46.840 ms 43.372 ms 47.041 ms

15 64.27.160.194 (64.27.160.194) 56.137 ms 55.887 ms 52.810 ms

16 slashdot.org (216.34.181.45) 42.727 ms 42.016 ms 41.437 ms

Здесь можно видеть, что на пути между нашей тестовой системой и http://www.slashdot.org/ находится 16 маршрутизаторов. Для маршрутизаторов, предоставляющих идентификационную информацию, выводятся имена хостов, IP-адреса и информация о производительности, которая включает три интервала времени, понадобившихся для передачи/подтверждения пакетов между локальной системой и маршрутизатором. Для маршрутизаторов, не предоставляющих идентификационной информации (например, из-за особенностей настройки маршрутизатора, заторов в сети, действий брандмауэров и т.д.), выводятся звездочки, как это можно видеть в строке, соответствующей второму переходу.

netstat – вывод параметров настройки сети и статистик

Программа netstat используется для исследования различных настроек сети и статистик. С помощью множества параметров этой команды можно просматривать самые разные аспекты настройки сети. С помощью параметра -ie, например, можно исследовать сетевые интерфейсы в системе:

[me@linuxbox ~]$ netstat -ie

eth0    Link encap:Ethernet HWaddr 00:1d:09:9b:99:67

        inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0

        inet6 addr: fe80::21d:9ff:fe9b:9967/64 Scope:Link

        UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

        RX packets:238488 errors:0 dropped:0 overruns:0 frame:0

        TX packets:403217 errors:0 dropped:0 overruns:0 carrier:0

        collisions:0 txqueuelen:100

        RX bytes:153098921 (146.0 MB) TX bytes:261035246 (248.9 MB)

        Memory:fdfc0000-fdfe0000

lo      Link encap:Local Loopback

        inet addr:127.0.0.1 Mask:255.0.0.0

        inet6 addr: ::1/128 Scope:Host

        UP LOOPBACK RUNNING MTU:16436 Metric:1

        RX packets:2208 errors:0 dropped:0 overruns:0 frame:0

        TX packets:2208 errors:0 dropped:0 overruns:0 carrier:0

        collisions:0 txqueuelen:0

        RX bytes:111490 (108.8 KB) TX bytes:111490 (108.8 KB)

Пример, приведенный выше, показывает, что наша тестовая система имеет два сетевых интерфейса. Первый, с именем eth0, – это интерфейс Ethernet; второй, с именем lo, – это петлевой интерфейс (loopback), виртуальный интерфейс, который система использует, чтобы разговаривать «сама с собой».

Выполняя причинно-следственную диагностику, первое, на что следует обратить внимание, – наличие слова UP в начале четвертой строки для каждого интерфейса, указывающего, что сетевой интерфейс включен, и присутствие допустимого IP-адреса в поле inet addr во второй строке. Для систем, использующих протокол динамической настройки хостов (Dynamic Host Configuration Protocol, DHCP), наличие допустимого IP-адреса в этом поле подтвердит нормальную работу DHCP.

Использование параметра -r позволит получить таблицу маршрутизации ядра. По этой таблице можно судить, как настроена передача пакетов между сетями:

[me@linuxbox ~]$ netstat -r

Таблица маршутизации ядра протокола IP

Destination  Gateway     Genmask       Flags  MSS Window  irtt Iface

192.168.1.0  *           255.255.255.0 U        0      0     0 eth0

default      192.168.1.1 0.0.0.0       UG       0      0     0 eth0

В этом простом примере представлена типичная таблица маршрутизации для клиентской машины, подключенной к локальной сети (Local Area Network, LAN), находящейся за брандмауэром/маршрутизатором. В первой строке демонстрируется адрес назначения 192.168.1.0. IP-адреса, оканчивающиеся нулем, соответствуют целым сетям, а не отдельным узлам в них, поэтому такой адрес подразумевает: «любой узел в локальной сети». Следующее поле, Gateway (шлюз), определяет имя или IP-адрес шлюза (маршрутизатора) для выхода текущего узла в указанную сеть. Звездочка в этом поле указывает, что использовать шлюз не требуется.

В последней строке в качестве адреса назначения указано слово default (по умолчанию). Эта строка управляет трафиком, адресованным любым сетям, не перечисленным в таблице. В данном примере видно, что роль шлюза выполняет маршрутизатор с адресом 192.168.1.1, который, по всей видимости, знает, что делать с трафиком.

Программа netstat имеет множество параметров, из которых мы рассмотрели только пару. Полный их список вы найдете на странице справочного руководства (man) для netstat.

Передача файлов по сети

Что толку от сети, если не знать, как перемещать файлы через нее? Существует множество программ, перемещающих данные по сети. Сейчас мы рассмотрим две из них, а еще несколько – в последующих разделах.

ftp – передача файлов по протоколу FTP

Одна из по-настоящему «классических» программ – ftp – получила свое имя от используемого ею протокола, протокола передачи файлов (File Transfer Protocol, FTP). Протокол FTP широко используется в Интернете для передачи файлов. Он поддерживается большинством веб-браузеров, если не всеми, и вам часто будут встречаться идентификаторы URI, начинающиеся с префикса протокола ftp://.

Программа ftp появилась задолго до веб-браузеров. Она использовалась для обмена данными с серверами FTP, компьютерами, хранящими файлы, которые можно выгружать и загружать по сети.

Протокол FTP (в своем первоначальном виде) небезопасен, потому что пересылает имена и пароли в открытом текстовом виде. То есть они не шифруются, и любой, кто способен перехватить сетевой трафик, сможет увидеть их. По этой причине практически все операции по протоколу FTP в Интернете выполняются анонимными северами FTP. Анонимный сервер позволяет любому желающему подключиться с учетной записью anonymous без пароля.

В следующем примере показан типичный сеанс работы с программой ftp для загрузки ISO-образа с дистрибутивом Ubuntu из каталога /pub/cd_images/Ubuntu-8.04 анонимного сервера FTP fileserver.

[me@linuxbox ~]$ ftp fileserver

Connected to fileserver.localdomain.

220 (vsFTPd 2.0.1)

Name (fileserver:me): anonymous

331 Please specify the password.

Password:

230 Login successful.

Remote system type is UNIX.

Using binary mode to transfer files.

ftp> cd pub/cd_images/Ubuntu-8.04

250 Directory successfully changed.

ftp> ls

200 PORT command successful. Consider using PASV.

150 Here comes the directory listing.

–rw-rw-r– 1 500 500 733079552 Apr 25 03:53 ubuntu-8.04-desktopi386.iso

226 Directory send OK.

ftp> lcd Desktop

Local directory now /home/me/Desktop

ftp> get ubuntu-8.04-desktop-i386.iso

local: ubuntu-8.04-desktop-i386.iso remote: ubuntu-8.04-desktop-i386.iso

200 PORT command successful. Consider using PASV.

150 Opening BINARY mode data connection for ubuntu-8.04-desktop-i386.iso

(733079552 bytes).

226 File send OK.

733079552 bytes received in 68.56 secs (10441.5 kB/s)

ftp> bye

В табл. 16.1 приводится описание команд, вводившихся в ходе этого сеанса.

Таблица 16.1. Примеры команд интерактивного сеанса ftp

Команда

Значение

ftp fileserver

Вызывает программу ftp и предлагает ей подключиться к серверу fileserver

anonymous

Имя пользователя для входа. После ввода имени пользователя появится приглашение ввести пароль. Некоторые серверы принимают пустой пароль. Другие могут требовать пароль в формате адреса электронной почты. В данном случае попробуйте что-нибудь похожее на user@example.com

cd pub/cd_images/Ubuntu-8.04

Выполняет переход в каталог в удаленной системе, где находится требуемый файл. Обратите внимание, что на большинстве анонимных серверов FTP файлы, доступные для загрузки всем желающим, находятся где-то в каталоге pub

ls

Выводит содержимое каталога в удаленной системе

lcd Desktop

Выполняет переход в каталог ~/Desktop в локальной системе. В этом примере программа ftp была вызвана в текущем рабочем каталоге ~. Данная команда назначает текущим рабочим каталог ~/Desktop

get ubuntu-8.04-desktop-i386.iso

Посылает удаленной системе запрос на передачу файла ubuntu-8.04-desktop-i386.iso локальной системе. Так как в локальной системе текущим рабочим выбран каталог ~/Desktop, файл будет загружен в него

bye

Выходит из удаленной системы и завершает сеанс программы ftp. Также можно использовать команды quit и exit

Если в приглашении ftp> ввести команду help, программа выведет список поддерживаемых команд. С помощью программы ftp можно выполнять множество обычных операций с файлами на сервере, правда, при наличии достаточных привилегий. Это не очень удобно, но выполнимо.

lftp – более удачная версия ftp

ftp – не единственный клиент FTP командной строки. В действительности таких клиентов множество. Одним из лучших (и более популярным) считается lftp Александра Лукьянова (Alexander Lukyanov). Этот клиент действует почти так же, как традиционная программа ftp, но имеет множество дополнительных функций, включая поддержку нескольких протоколов (в том числе и HTTP), возможность автоматического восстановления прервавшейся загрузки, выполнение операций в фоновом режиме, автодополнение путей по клавише Tab и многое другое.

wget – неинтерактивный загрузчик файлов из сети

wget – еще одна популярная программа командной строки для загрузки файлов. Ее удобно использовать для загрузки содержимого веб– и FTP-сайтов. С помощью wget можно загрузить один файл, несколько файлов и даже целый сайт. Например, загрузить первую страницу сайта http://www.linuxcommand.org/ можно командой:

[me@linuxbox ~]$ wget http://linuxcommand.org/index.php

–11:02:51– http://linuxcommand.org/index.php

           => `index.php'

Распознаётся linuxcommand.org... 66.35.250.210

Подключение к linuxcommand.org|66.35.250.210|:80... соединение установлено.

HTTP-запрос отправлен. Ожидание ответа… 200 OK

Длина: 3808 (3.7K) [text/html]

Сохранение в: "index.php"

    [ <=>                                 ] 3,120 –.–KB/s

11:02:51 (161.75 MB/s) – `index.php' сохранён [3808/30808]

Большинство параметров, поддерживаемых программой wget, позволяет организовать рекурсивную загрузку, загрузку файлов в фоновом режиме (позволяет выйти из системы без остановки загрузки) и догружать частично загруженные файлы. Эти возможности хорошо описаны на странице справочного руководства (man).

Безопасные взаимодействия с удаленными узлами

Уже много лет Unix-подобные операционные системы поддерживают возможность удаленного администрирования по сети. На первом этапе, еще до повсеместного распространения Интернета, существовала пара популярных программ для входа в удаленные сетевые узлы: rlogin и telnet. Однако эти программы страдали тем же фатальным недостатком, что и программа ftp; все данные (включая имена пользователей и пароли) они передавали в виде открытого текста. Это совершенно недопустимо в эпоху Интернета.

ssh – безопасный вход в удаленные компьютеры

Для решения описанной проблемы был разработан протокол с названием SSH (Secure Shell – безопасная командная оболочка). SSH решает две основные проблемы безопасного взаимодействия с удаленными сетевыми узлами. Во-первых, он подтверждает, что удаленный узел является именно тем, за кого себя выдает (это предотвращает атаки вида «злоумышленник в середине» (man-in-the-middle), и, во-вторых, шифрует все данные, передаваемые между локальным и удаленным узлами.

В своей работе протокол SSH опирается на два компонента. На удаленном узле действует сервер SSH, принимающий соединения на порте 22, а в локальной системе действует клиент SSH, осуществляющий обмен информацией с удаленным сервером.

Большинство дистрибутивов Linux включают реализацию SSH с названием OpenSSH из проекта BSD. Некоторые дистрибутивы (например, Red Hat) по умолчанию содержат пакеты с обоими компонентами, сервером и клиентом, тогда как другие (например, Ubuntu) включают только клиента. Чтобы система могла принимать удаленные соединения, в ней должен быть установлен пакет с реализацией сервера OpenSSH-server, этот сервер должен быть настроен и запущен, и если система находится за брандмауэром, последний должен пропускать входящие соединения на порт TCP с номером 22.

ПРИМЕЧАНИЕ

Если у вас нет удаленной системы, с которой можно было бы устанавливать соединения, но вы желаете поработать с примерами, приведенными ниже, установите пакет OpenSSH-server в своей системе и используйте имя localhost в качестве имени удаленного узла. В этом случае ваш компьютер будет устанавливать соединения с самим собой.

Программа клиента SSH, используемая для подключения к серверам SSH, имеет достаточно очевидное имя: ssh. Подключиться к удаленному сетевому узлу с именем remote-sys можно с помощью программы клиента ssh, как показано ниже:

[me@linuxbox ~]$ ssh remote-sys

The authenticity of host 'remote-sys (192.168.1.4)' can't be established.

RSA key fingerprint is 41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.

Are you sure you want to continue connecting (yes/no)?8

При первой попытке подключения на экран выводится предупреждение, сообщающее, что аутентичность удаленного узла не может быть установлена. Это объясняется тем, что программа-клиент прежде никогда не подключалась к данному удаленному узлу. Чтобы принять идентификационные данные удаленного узла, введите yes в ответ на приглашение. После установки соединения пользователю будет предложено ввести пароль:

Warning: Permanently added 'remote-sys,192.168.1.4' (RSA) to the list of known hosts.

me@remote-sys's password:9

После ввода действительного пароля в терминале появится приглашение командной оболочки из удаленной системы:

Last login: Tue Aug 30 13:00:48 2011

[me@remote-sys ~]$

Сеанс с удаленной командной оболочкой продолжается, пока пользователь не введет команду exit в приглашении удаленной командной оболочки, после чего соединение закроется. В этот момент возобновится сеанс локальной командной оболочки и появится ее приглашение к вводу.

К удаленной системе можно также подключиться с другим именем пользователя. Например, если локальный пользователь me имеет в удаленной системе учетную запись с именем bob, он сможет войти в удаленную систему с именем bob, выполнив следующую команду:

[me@linuxbox ~]$ ssh bob@remote-sys

bob@remote-sys's password:

Last login: Tue Aug 30 13:03:21 2011

[bob@remote-sys ~]$

Как отмечалось выше, ssh проверяет аутентичность удаленного узла. Если удаленный узел не пройдет аутентификацию, появится следующее предупреждение:

[me@linuxbox ~]$ ssh remote-sys

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@

IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!

Someone could be eavesdropping on you right now (man-in-the-middle attack)!

It is also possible that the RSA host key has just been changed.

183

The fingerprint for the RSA key sent by the remote host is

41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.

Please contact your system administrator.

Add correct host key in /home/me/.ssh/known_hosts to get rid of this message.

Offending key in /home/me/.ssh/known_hosts:1

RSA host key for remote-sys has changed and you have requested strict

checking.

Host key verification failed10.

Это сообщение появляется в двух возможных ситуациях. Первая: злоумышленник мог попытаться провести атаку вида «злоумышленник в середине». Это случается редко, потому что все знают, что ssh предупреждает пользователя об этом. Более вероятная причина связана с некими изменениями в удаленной системе: например, была выполнена переустановка операционной системы или сервера SSH. Однако в интересах безопасности не следует сбрасывать со счетов первую возможность. Всегда обращайтесь к системному администратору удаленной системы, когда появится это сообщение.

Убедившись в безобидности причин, вызвавших это сообщение, можно исправить проблему на стороне клиента. Для этого с помощью текстового редактора (например, vim) удалите устаревший ключ из файла ~/.ssh/known_hosts. В примере сообщения выше присутствует строчка:

Offending key in /home/me/.ssh/known_hosts:111

Это означает, что подозреваемый ключ хранится в строке 1, в файле known_hosts. Удалите эту строку из файла и позвольте программе ssh принять новые идентификационные данные от удаленной системы.

Помимо открытия сеанса командной оболочки в удаленной системе ssh позволяет также выполнить единственную команду. Например, в удаленной системе remote-sys можно выполнить команду free и получить результаты в локальной системе:

[me@linuxbox ~]$ ssh remote-sys free

me@twin4's password:

             total     used     free    shared   buffers    cached

Mem:        775536   507184   268352         0    110068    154596

–/+ buffers/cache:   242520   533016

Swap:      1572856        0  1572856

[me@linuxbox ~]$

Этот прием открывает возможность для довольно интересных вариантов использования, как в следующем примере, где вывод команды ls в удаленной системе перенаправляется в локальный файл:

[me@linuxbox ~]$ ssh remote-sys 'ls *' > dirlist.txt

me@twin4's password:

[me@linuxbox ~]$

Обратите внимание на одиночные кавычки. Они необходимы для предотвращения подстановки пути в локальной системе; нам требуется, чтобы подстановка была выполнена в удаленной системе. Аналогично, если бы нам потребовалось перенаправить вывод в файл в удаленной системе, мы могли бы поместить оператор перенаправления и имя файла внутрь одиночных кавычек:

[me@linuxbox ~]$ ssh remote-sys 'ls * > dirlist.txt'


    Ваша оценка произведения:

Популярные книги за неделю

    wait_for_cache