Пакет ssh: sftp, scp и ssh-agent

  Автор: © Matteo Dell'Omodarme
Перевод: © Дмитрий Попков.


 

Цель этой статьи - обзор нескольких полезных программ из пакета ssh, а именно sftp, scp, ssh-agent и ssh-add. В дальнейшем будем предполагать, что демон ssh2 уже сконфигурирован и запущен.

Краткий обзор sftp и scp

Давайте сосредоточим внимание на sftp and scp.
Первый (Secure File Transfer) - ftp-подобный клиент, который может быть использован для передачи файлов по сети.
Он не использует FTP демонов (ftpd или wu-ftpd) для соединения, что позволяет существенно повысить уровень защиты. Анализируя журналы нашей системы за последний месяц, мы обнаружили, что 80% атак было направлено на wu-ftpd. Использование sftp прозволяет отключить потенциально опасный wu-ftpd.

Второй (Secure Copy) используется для защищенного копирования файлов по сети. Это - замена небезопасной команды rcp.

Sftp и scp не требуют никакого специально выделенного сервера, так как эти две программы соединяются с ssh сервером. Чтобы использовать sftp и scp вставьте следующую строку в конфигурационный файл /etc/ssh2/sshd2_config:

 
subsystem-sftp                  sftp-server
после этой модификации перезапустите sshd.
Учтите, что Вы можете пользоваться sftp и scp только при соединении с хостом, где запущен sshd.

Sftp

Sftp использует ssh2 при соединении, это означает, что передаваемые файлы защищены настолько, насколько это возможно.
Есть два основных преимущества при использовании sftp вместо ftp:
  1. Пароли никогда не передаются отрытым текстом, что предотвращает атаки с использованием сниферов (sniffer).
  2. Данные шифруются во время передачи, затрудняя прослушивание и подтасовку.
Использование sftp2 действительно просто. Предположим, что Вам нужно соединиться с помощью sftp с хостом host1, имея на ней аккаунт myname. Используйте команду:
sftp myname@host1
некоторые опции могут быть заданы из командной строки (см. man sftp)

Когда sftp2 будет готов к выполнению команд, высветится приглашение sftp>. В справочном руководстве приведен полный перечень возможных команд, некоторые из них приведем здесь:

  • quit:
    Выход из приложения.
  • cd directory:
    Сменить текущий удаленний каталог.
  • lcd directory:
    Сменить текущий локальный каталог.
  • ls [ -R ] [ -l ] [ file ... ]:
    Перечень файлов на удаленном сервере, для каталогов - их содержание. Когда задана опция -R, дерево каталогов просматривается рекурсивно. (По умолчанию подкаталоги запрошенного каталога не видны). С опцией -l показываются также права, владельцы, размер и дата модификации. Если никакие опции не заданы, просматривается содержание . . В настоящее время опции -R и -l не совместимы.
  • lls [ -R ] [ -l ] [ file ... ]:
    То же, что и ls, но для локальных файлов.
  • get [ file ... ]:
    Передает указанные файлы с удаленной точки на локальную. Каталоги рекурсивно копируются с их содержимым.
  • put [ file ... ]:
    Передает указанные файлы с локальной точки на удаленную. Каталоги рекурсивно копируются с их содержимым.
  • mkdir dir (rmdir dir):
    Пытается создать (удалить) каталог dir.
sftp2 поддерживает шаблоны (wildcards) в командах ls, lls, get, и put. Формат описан в справочном руководстве sshregex

Так как sftp использует крипто, это имеет свои минусы: уменьшение скорости соединения (примерно в 2-3 раза по моему опыту), но это не так важно по сравнению с проблемами защиты сети.
Запущенный в нашей локальной сети Network Sniffer вылавливал в среднем 4 пароля в час из ftp-соединений. Введение sftp как стандартного протокола передачи файлов помогло устранить эту проблему защиты.

Scp

Scp2 (Secure Copy) применяется для надежного копирования файлов по сети. Используется ssh2 для передачи данных, а это означает такую же надежную аутификацию, как и в ssh2
Возможно это самый простой способ передачи файлов на удаленную машину. Предположим, Вы хотите скопировать файл filename из каталога d local_dir на Ваш аккаунт myname в каталог remote_dir на машине host1. Для применения scp введите в командной строке:
scp local_dir/filename myname@host1:remote_dir
таким образом файл filename скопирован с тем же именем. Могут быть использованы wildcards (см. sshregex man page).
Команда
scp local_dir/* myname@host1:remote_dir
копирует все файлы из каталога local_dir в каталог remote_dir на host1.
Команда:
scp myname@host1:remote_dir/filename .
копирует файл filename из remote_dir на host1 в локальный каталог.
Scp поддерживает много параметров и позволяет передавать файлы с одной удаленной машины на другую, как показано в следующем примере :
scp myname@host1:remote_dir/filename  myname@host2:another_dir
См. man для полной ясности.

Очевидно, используя scp, Вы должны знать структуру каталогов на удаленной машине, поэтому на практике предпочитают sftp.

Управление ключами ssh

Пакет SSH содержит две программы для управления аутификационными ключами, позволяя пользователю соединяться с удаленной машиной без ввода пароля или кодовой фразы. Это ssh-agent и ssh-add.

ssh-agent

>Читаем man ssh-agent: "ssh-agent2 - это программа для хранения аутенфикационных частных ключей. Идея в том, что ssh-agent2 стартует в начале Х-сессии или login-сессии, и все другие окна или программы стартуют как дочерние от ssh-agent2 (обычные команды запуска Х или командной оболочки). Программы, стартовавшие под агентом, наследуют подключение к нему, и агент автоматически использует аутенфикационный публичный ключ при регистрации на других машинах с использованием ssh".

Существуют два способа использовать ssh-agent в зависимости от использования Вами xdm.
В случае использования xdm необходимо отредактировать файл .xsession, расположенный в каталоге $HOME. Возможны два способа:
Скопируйте .xsession в .xsession-stuff и измените .xession так, чтобы он содержал только строку:

 
exec ssh-agent ./.xsession-stuff
Альтернативно откройте файл .xsession, найдите строки, содержащие "exec program" и измените их на "exec ssh-agent program".

Выйдите из X-сессии и перестартуйте Х. ssh-agent запустит X-сессию как собственный дочерний процесс и будет ждать ssh ключ, чтобы внести его в свою базу.

Если xdm не запущен, процедура использования ssh-agent еще проще, потому что Вы можете запустить Х с помощью команды:

ssh-agent startx
Таким образом мы получили рабочую версию ssh-agent.

ssh-add

Как только ssh-agent будет запущен, Вы можете идентифицироваться в его базе с помощью команды ssh-add. Вы можете идентифицироваться только из дочернего от ssh-agent процесса, иначе увидите сообщение об ошибке:
 
Failed to connect to authentication agent - agent not running?
Использование ssh-add несложно: в командной строке введите:
ssh-add
ssh-add просмотрит файл $HOME/.ssh2/identification, который содержит имена частных ключей для аутификации. Если этот файл не существует, будет использовано стандартное имя для частных ключей(т.е. $HOME/.ssh2/id_dsa_1024_a).
Если какой-либо публичный ключ требует кодовой фразы, ssh-add запросит ее у пользователя, как в следующем примере:
Adding identity: /home/matt/.ssh2/id_dsa_1024_a.pub
Need passphrase for /home/matt/.ssh2/id_dsa_1024_a (..)
Enter passphrase:
Вы можете получить список всех идентифицировавшихся в настоящее время с помощью агента при помощи команды ssh-add -l:
Listing identities.
The authorization agent has one key:
id_dsa_1024_a: 1024-bit dsa, (...)

Заключение и полезные ссылки

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

Эта статья только введение в пакет SSH; больше Вы узнаете из справочных руководств по ssh, sshd и sftp.

Пакет SSH можно получить с:
www.ssh.com/products/ssh/, основного сайта SSH или с зеркала.
Здесь можно найти много интересного о SSH технологии и криптографии вообще: Tech corner.

Или попробуйте www.openssh.com, где можно загрузить openssh версию SSH протокола. Портируемая версия находится на www.openssh.com/portable.html.
Также почитайте openssh FAQ: www.openssh.com/faq.html.

 


Copyright © 2001, Matteo Dell'Omodarme.
Copying license http://www.linuxgazette.com/copying.html
Published in Issue 64 of Linux Gazette, March 2001

Вернуться на главную страницу