Убедившись в безобидности причин, вызвавших это сообщение, можно исправить проблему на стороне клиента. Для этого с помощью текстового редактора (например, vim) удалите устаревший ключ из файла ~/.ssh/known_hosts. В примере сообщения выше присутствует строчка:
Offending key in /home/me/.ssh/known_hosts:111
Это означает, что подозреваемый ключ хранится в строке 1, в файле known_hosts. Удалите эту строку из файла и позвольте программе ssh принять новые идентификационные данные от удаленной системы.
Помимо открытия сеанса командной оболочки в удаленной системе ssh позволяет также выполнить единственную команду. Например, в удаленной системе remote-sys можно выполнить команду free и получить результаты в локальной системе:
[[email protected] ~]$ ssh remote-sys free
[email protected]'s password:
total used free shared buffers cached
Mem: 775536 507184 268352 0 110068 154596
-/+ buffers/cache: 242520 533016
Swap: 1572856 0 1572856
[[email protected] ~]$
Этот прием открывает возможность для довольно интересных вариантов использования, как в следующем примере, где вывод команды ls в удаленной системе перенаправляется в локальный файл:
[[email protected] ~]$ ssh remote-sys 'ls *' > dirlist.txt
[email protected]'s password:
[[email protected] ~]$
Обратите внимание на одиночные кавычки. Они необходимы для предотвращения подстановки пути в локальной системе; нам требуется, чтобы подстановка была выполнена в удаленной системе. Аналогично, если бы нам потребовалось перенаправить вывод в файл в удаленной системе, мы могли бы поместить оператор перенаправления и имя файла внутрь одиночных кавычек:
[[email protected] ~]$ ssh remote-sys 'ls * > dirlist.txt'
создание туннеля SSH
При установке SSH-соединения с удаленным узлом между локальной и удаленной системами создается шифрованный туннель. Обычно этот туннель используется для безопасной передачи команд из локальной системы в удаленную и безопасной передачи результатов обратно. Помимо этой основной задачи, протокол SSH позволяет также передавать через шифрованный туннель самые разные виды сетевого трафика, создавая своего рода виртуальную частную сеть (Virtual Private Network, VPN) между локальной и удаленной системами.
Чаще всего, пожалуй, эта возможность используется для передачи трафика XWindow System. Из системы с действующим X-сервером (то есть отображающей графический интерфейс) можно запустить программу-клиента X (приложение с графическим интерфейсом) в удаленной системе и отображать ее интерфейс в локальной системе. Как это делается, показано в следующем примере. Представьте, что мы работаем в системе Linux с именем linuxbox, где запущен X-сервер, и нам понадобилось запустить программу xload в удаленной системе с именем remote-sys так, чтобы графический интерфейс программы отображался в локальной системе. Добиться этого можно следующим способом:
[[email protected] ~]$ ssh -X remote-sys
[email protected]'s password:
Last login: Mon Sep 05 13:23:11 2011
[[email protected] ~]$ xload
После запуска программы xload в удаленной системе ее окно появится в локальной системе. В некоторых системах может понадобиться использовать параметр -Y вместо -X.
scp и sftp — безопасная передача файлов
Пакет OpenSSH включает еще две программы, способные использовать шифрованный туннель SSH для копирования файлов по сети. Первая, scp (secure copy — безопасное копирование) используется для копирования файлов, как уже знакомая вам программа cp. Основное отличие заключается в необходимости предварять пути к исходному или конечному файлу именем удаленного узла и символом двоеточия за ним. Например, скопировать документ с именем document.txt из домашнего каталога в удаленной системе remote-sys в текущий рабочий каталог в локальной системе можно так:
[[email protected] ~]$ scp remote-sys:document.txt .
[email protected]'s password:
document.txt 100% 5581 5.5KB/s 00:00
[[email protected] ~]$
По аналогии с командой ssh перед именем удаленного узла можно указать имя пользователя, если имя учетной записи в удаленной системе не совпадает с именем учетной записи в локальной системе:
[[email protected] ~]$ scp [email protected]:document.txt .
Вторая программа копирования файлов через SSH-соединение: sftp. Как следует из ее имени — это безопасная замена для программы ftp. sftp действует практически так же, как оригинальная программа ftp, которую мы использовали выше, только передает данные не в открытом текстовом виде, а через шифрованный туннель SSH. sftp имеет важное преимущество перед обычной программой ftp — она не требует, чтобы на удаленном узле работал сервер FTP. Ей необходим только сервер SSH. Это означает, что любой компьютер, к которому можно подключиться с помощью клиента SSH, можно также использовать в качестве FTP-подобного сервера. Ниже приводится пример сеанса работы с программой sftp:
[[email protected] ~]$ sftp remote-sys
Connecting to remote-sys...
[email protected]'s password:
sftp> ls
ubuntu-8.04-desktop-i386.iso
sftp> lcd Desktop
sftp> get ubuntu-8.04-desktop-i386.iso
Fetching /home/me/ubuntu-8.04-desktop-i386.iso to ubuntu-8.04-desktop-i386.iso
/home/me/ubuntu-8.04-desktop-i386.iso 100% 699MB 7.4MB/s 01:35
sftp> bye
ПРИМЕЧАНИЕ
Протокол SFTP поддерживается многими диспетчерами файлов с графическим интерфейсом, входящими в состав дистрибутивов Linux. В Nautilus (GNOME) или Konqueror (KDE) можно ввести в адресную строку идентификатор URI, начинающийся с sftp://, и работать с файлами, хранящимися в удаленной системе с действующим сервером SSH.
существуют ли клиенты ssh для windows?
Допустим, что вы работаете за компьютером с операционной системой Windows и вам нужно зайти на свой сервер с Linux, чтобы выполнить некую работу. Как быть? Нужно просто установить в Windows программу клиента SSH! Существует довольно много таких программ. Наиболее популярной, пожалуй, является программа PuTTY Симона Тэтхэма (Simon Tatham) и его команды. Программа PuTTY отображает окно терминала и позволяет пользователю Windows открыть сеанс SSH (или telnet) с удаленным узлом. Программа также предоставляет аналоги программ scp и sftp.
Программа PuTTY доступна по адресу http://www.chiark.greenend.org.uk/~sgtatham/putty/.
8 Аутентичность узла ‘remote-sys (192.168.1.4)’ не может быть установлена. Идентификационный ключ RSA: 41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb. Вы уверены, что желаете установить соединение (да/нет)? — Примеч. пер.
9 Внимание: Узел ‘remote-sys,192.168.1.4’ (RSA) добавлен в хранимый список известных узлов. — Примеч. пер.
10 ВНИМАНИЕ: ИЗМЕНИЛСЯ ИДЕНТИФИКАТОР УДАЛЕННОГО УЗЛА!
ЕСТЬ ВЕРОЯТНОСТЬ, ЧТО КТО-ТО ЗАМЫСЛИЛ ЧТО-ТО НЕДОБРОЕ!
Кто-то может подслушивать вас прямо сейчас (атака "злоумышленник в середине")!
Возможно также, что просто изменился идентификационный ключ RSA узла.
Удаленный узел прислал идентификационный ключ RSA:
41:ed:7a:df:23:19:bf:3c:a5:17:bc:61:b3:7f:d9:bb.
Пожалуйста, свяжитесь со своим системным администратором.
Добавьте правильный ключ узла в /home/me/.ssh/known_hosts, чтобы избавиться от этого сообщения.
Подозреваемый ключ хранится в файле /home/me/.ssh/known_hosts:1
Идентификационный ключ RSA узла remote-sys изменился, а вы запросили строгую проверку.
Проверка ключа удаленного узла завершилась неудачей.
— Примеч. пер.
11 Подозреваемый ключ хранится в файле /home/me/.ssh/known_hosts:1 — Примеч. пер.
17. Поиск файлов
Блуждая по системе Linux, мы совершенно ясно увидели, что типичная Linux-система содержит множество файлов. В связи с этим возникает вопрос: как искать нужные файлы? Мы уже знаем, что файловая система в Linux организована в соответствии с определенными соглашениями, которые переходили из одного поколения Unix-подобных систем в другое, но огромное число файлов может порождать труднопреодолимую проблему.
В этой главе мы рассмотрим два инструмента для поиска файлов в системе:
• locate – выполняет поиск файлов по именам.
• find – выполняет поиск файлов в иерархии каталогов.
Мы также познакомимся с командой, часто используемой вместе с командами поиска файлов для обработки списков с результатами:
• xargs – конструирует команды на основе данных, полученных из стандартного ввода, и выполняет их.
Дополнительно в этой главе будет представлена пара команд, которые помогут нам в наших исследованиях:
• touch – изменяет времена, ассоциированные с файлом.
• stat – выводит статус файла или файловой системы.
locate — простой способ поиска файлов
Программа locate выполняет быстрый поиск в базе данных имен файлов и выводит все имена, соответствующие искомой строке. Допустим, к примеру, что нужно найти все программы с именами, начинающимися с zip. Поскольку требуется найти программы, можно предположить, что имя каталога с программами оканчивается на bin/. Соответственно можно попробовать выполнить поиск с помощью locate, как показано ниже:
[[email protected] ~]$ locate bin/zip
locate выполнит поиск в базе данных имен файлов и выведет все имена, содержащие строку bin/zip:
/usr/bin/zip
/usr/bin/zipcloak
/usr/bin/zipgrep
/usr/bin/zipinfo
/usr/bin/zipnote
/usr/bin/zipsplit
Если к результатам поиска предъявляются более строгие требования, команду locate можно объединить с другими инструментами, такими как grep, позволяющими осуществить более сложный поиск:
[[email protected] ~]$ locate zip | grep bin
/bin/bunzip2
/bin/bzip2