SSH


Клиенты SSH

Безусловно, клиент SSH уже присутствует в FreeBSD, как и в большинстве других UNIX-подобных операционных систем. По возможности старайтесь пользоваться встроенным клиентом SSH, поскольку он входит в состав пакета OpenSSH, разработанного командой OpenBSD, и является не только самой популярной, но и лучшей реализацией. Если вы вынуждены использовать операционную систему Microsoft Windows, рекомендую программу PuTTY, которая может бесплатно использоваться как в коммерческих, так и в некоммерческих целях и является прекрасным эмулятором терминала.

Эта книга посвящена FreeBSD, поэтому все внимание будет уделено клиенту OpenSSH в этой операционной системе. Вы можете настроить клиента самыми разными способами, но в большинстве случаев настройки сводятся к запрету использования функций, предлагаемых сервером. Если вам действительно интересна тема настройки поведения клиента, прочитайте страницу руководства ssh_config(5).

Чтобы подключиться к другому хосту через SSH, следует ввести команду ssh имя_хоста. В ответ вы должны увидеть примерно следующее:

# ssh sardines.blackhelicopters.org
The authenticity of host 'sardines.blackhelicopters.org (192.168.1.1)' can't be established.
DSA key fingerprint is a4:df:7c:7e:0e:27:e5:21:b4:f4:0e:2b:c9:10:5f:ea.
Are you sure you want to continue connecting (yes/no)? yes
(Перевод: Подлинность хоста 'sardines.blackhelicopters.org (192.168.1.1)' не может быть установлена.
Отпечаток ключа DSA a4:df:7с:7е:0е:27:е5:21:b4:f4:0e:2b:c9:10:5f:ea.
Вы действительно желаете продолжить соединение (yes/no)?)

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

Отпечаток, представленный клиентом, должен совпадать с отпечатком, сгенерированным на сервере. Если отпечатки не совпадают, значит вы подключились не к тому хосту и следует немедленно разорвать соединение. Если отпечатки совпадают, можно принять ключ и продолжить соединение. После того как вы подтвердите свое желание продолжить, ключ хоста будет сохранен в вашем домашнем каталоге в списке .ssh/known_hosts.

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

Примите ключ хоста, и вам будет позволено выполнить вход в систему. Хотя использование закрытого ключа и секретной фразы предпочтительнее использования простого пароля, все же в SSH пароль защищен намного лучше, чем в telnet.

Копирование файлов через SSH

Клиент SSH хорош для организации доступа к командной строке, а как быть с перемещением файлов из одной системы в другую? SSH включает два инструмента перемещения файлов по сети — scp(1) и sftp(1).

Инструмент scp(1) (secure copy — безопасное копирование) идеально подходит для перемещения отдельных файлов. Команда scp принимает два аргумента: первый — текущее местоположение файла, и второй — место, где файл будет сохранен. Место, куда следует скопировать файл, определяется строкой в формате <имя_пользователя>@<имя_хоста>:<имя_файла>. Допустим, требуется скопировать файл bookbackup.tgz из локальной системы на удаленный сервер bewilderbeast.blackhelicopters.org под другим именем. Для этого вводим команду:

# scp bookbackup.tgz mwlucas@bewilderbeast.blackhelicopters.org:bookbackup-january.tgz

Если файла копируется с тем же именем, то имя файла во втором аргументе можно опустить:

# scp bookbackup.tgz mwlucas@bewilderbeast.blackhelicopters.org:

Кроме того, scp(1) позволяет копировать файлы из удаленной системы в локальную:

# scp mwlucas@bewilderbeast.blackhelicopters.org:bookbackup-january.tgz bookbackup.tgz

Если копия файла в локальной системе должна иметь то же самое имя, имя копии в команде можно заменить символом точки:

# scp mwlucas@bewilderbeast.blackhelicopters.org:bookbackup.tgz .

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

# scp bookbackup.tgz bewilderbeast.blackhelicopters.org:

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

Если вы предпочитаете интерактивные системы или когда заранее неизвестно точное имя файла, который требуется скопировать из удаленной системы, на помощь придет sftp(1). Команда sftp(1) принимает единственный аргумент, состоящий из имени пользователя и имени сервера, в формате, который используется командой scp для обозначения удаленного сервера:

# sftp mwlucas@bewilderbeast.blackhelicopters.org
Connecting to bewilderbeast...
Password:
sftp> ls

Интерфейс sftp(1) очень напоминает стандартный клиент FTP; он поддерживает типичные команды FTP, такие как ls (list — список), cd (change directory — изменить каталог), get (download a file — загрузить файл) и put (upload a file — выгрузить файл на сервер). Одно из существенных отличий состоит в том, что sftp(1) не требует выбирать тип передаваемых файлов — ASCII или двоичный; файлы просто передаются в том виде, в каком они есть.

С помощью команд scp и sftp вы сможете полностью устранить из своей сети пароли в открытом текстовом виде.

OpenSSH защищает все

Многие сетевые программы включают поддержку SSH для обеспечения взаимодействий. Кроме того, OpenSSH может создавать туннели между портами TCP разных машин. Благодаря OpenSSH можно обеспечить передачу любых данных по сети только в зашифрованном виде.

Комментарии запрещены.