Руководство по ssh

Уровень сложности
Простой

Время на прочтение
5 мин

Количество просмотров 26K

Программистов, сисадминов, devops’ов, тестировщиков часто объединяет использование некоторых общих технологий. Например, возможность иметь удалённый доступ к серверу пригодилось бы любому из указанной выше анекдотичной компании. Поэтому в этой статье мы рассмотрим основы работы с протоколом SSH на базовом уровня (без генерации ключей, подписей, мам, пап и кредитов). «Продвинутое» использование посмотрим уже отдельно, в следующий раз. Материал подготовил Макс, автор YouTube-канала PyLounge. Поехали!

Введение

SSH (Secure SHell — защищенная оболочка) — сетевой протокол прикладного уровня, предназначенный для безопасного удаленного доступа к различным системам (Linux, Windows, Mac).

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

Эта служба была создана в качестве замены не зашифрованному Telnet и использует криптографические техники, чтобы обеспечить, что всё сообщение между сервером и пользователем было зашифровано.

Чтобы установить SSH-соединение, необходимы два компонента: SSH-сервер и SSH-клиент. Сервер прослушивает определенный порт (по умолчанию это порт 22) и при успешной аутентификации дает доступ пользователю. Все команды, которые используются на SSH-клиенте, отправляются через защищенный канал связи на SSH-сервер, на котором они выполняются и откуда отправляют результат работы обратно клиенту.

SSH-сервер

Устанавливается на управляемой операционной системе и принимает входящие подключения от клиентских машин, проверяя соединение одним из способов:

  • по IP-адресу клиента, что не слишком безопасно из-за риска подмены;

  • по публичному ключу клиента и имени пользователя. Нужно создать приватный (закрытый) и публичный (открытый) ключ. Зашифровав информацию одним ключом, можно расшифровать ее только другим;

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

Платные и бесплатные SSH-серверы есть для всех распространенных ОС:

  • BSD — OpenSSH;

  • Linux — dropbear, lsh-server, openssh-server;

  • Windows — freeSSHd, copssh, WinSSHD, OpenSSH и т. д.

SSH-клиент

Используется для входа на удаленный сервер и выполнения команд. Через клиент выполняется управление удаленным компьютером.

SSH-клиенты разработаны для всех ОС. Имеют платные и бесплатные версии:

  • Linux/BSD — openssh-client, putty, ssh, Vinagre;

  • Windows — PuTTY, SecureCRT, ShellGuard;

  • Android — connectBot.

Встроенный SSH-клиент Windows, основанный на OpenSSH, предустановлен в ОС, начиная с Windows 10 1809.

Установка OpenSSH на Ubuntu

Установка с помощью менеджера пакетов apt-get:

sudo apt-get install openssh-server

Проверка SELinux

Security Enhanced Linux, или SELinux – это усовершенствованный механизм контроля доступа, встроенный в большинство современных дистрибутивов Linux. Первоначально он был разработан Агентством национальной безопасности США для защиты компьютерных систем от вторжения злоумышленников и взлома. SELinux также может помешать работе с ssh. Поэтому необходимо убедиться, что он отключен, либо отключить его.

Устанавливаем доп. инструменты для работы с сетью и настройками безопасности:

sudo apt-get install policycoreutils
sudo apt-get install net-tools

Проверяем статус SELinux. Состояние должно быть disable.

sestatus

Подключение к виртуальной машине с типом подключения NAT

Если виртуальная машина использует тип сетевого подключения NAT, то первоначально необходимо настроить проброс портов. Пробросим порт хоста 2222 (или любой свободный) на гостевой порт виртуальной машины номер 22 (порт ssh по умолчанию).

После этого мы можем подключиться из Windows к нашей виртуальной машине.

Подключение по ssh через PuTTY

Т.к. в качестве сетевого подключения у виртуальной машины используется NAT, при подключении мы будем указывать петлевой адрес localhost (127.0.0.1) c портом, на который был назначен проброс.

После этого вводим имя пользователя (пользователь должен существовать в linux!!!) и пароль от этого пользователя.

Подключение по ssh через Командную строку Windows (cmd)

Запускаем командную строку сочетанием клавиш Win + R . В открывшемся окне указываем cmd. Нажимаем OK.

В общем видео подключение по ssh имеет вид:

ssh имя_пользователя@ip_адрес_компьютера_к_которому_подключаемся -p порт

Если для подключения используется стандартный порт ssh — 22, то порт можно не указывать.

В открывшемся окне вводим команду:

ssh student@127.0.0.1 -p 2222

Вводим пароль пользователя. Всё. Вы великолепны!

Подключение к виртуальной машине с типом подключение Сетевой мост

С типом подключения Сетевой мост необходимо выдать статический ip для Linux системы. Дальнейшее подключение будет уже по этому, выданному ip, а не через localhost.

Установка статического ip

Начиная с выпуска Ubuntu 17.10 NetPlan теперь это инструмент настройки сети по умолчанию для управления настройками сети, заменяющий файл конфигурации /etc/network/interfaces, который использовался в предыдущих версиях.

Файлы конфигурации для Netplan находятся в каталоге /etc/netplan и написаны на языке YAML. В этом каталоге вы найдете файлы конфигурации YAML.

Откроем конфигурационный файл:

sudo nano /etc/netplan/*.yaml

Отредактируем конфигурационный файл:

network:  
  version: 2
  renderer: NetworkManager
  ethernets:
      enp0s3:
          dhcp4: false
          addresses: [10.40.0.224/24]
          gateway4: 10.40.0.1
          nameservers:
              addresses: [10.2.0.8, 10.2.0.3]

Здесь:

  • ethernets — указывает на проводное Ethernet подключение;

  • enp0s3 — имя сетевого интерфейса (можно узнать командой ifconfig);

  • dhcp4 — автоматическая выдача ipv4-адреса с помощью службы dhcp (для ipv6 указывать dhcp6);

  • addresses — ip-адрес и маска сети, которые назначаются компьютеру;

  • gateway4 — шлюз по умолчанию;

  • nameservers — список dns-серверов.

Посмотреть настройки можно с хостовой машины на Windows с помощью команды ipconfig /all.

Чтобы применить изменения и перезагрузить сеть, вводим команду:

sudo netplan apply

Подключение по ssh

Запускаем командную строку сочетанием клавиш Win + R . В открывшемся окне указываем cmd. Нажимаем OK.

В открывшемся окне вводим команду:

ssh student@10.40.0.224

Вводим пароль пользователя. Всё. Вы великолепны (2)!

Заключение

Несмотря на высокую защиту протокола, использование стандартного порта значительно повышает риск взлома сервера. Например, это можно сделать при помощи brute-force (атака полным перебором). Порт 22 — открытый, поэтому злоумышленнику нужно только подобрать логин и пароль к серверу. Это сложно, но возможно. Чтобы максимально ограничить доступ к серверу для злоумышленников (настроить брандмауэр, iptables), можно сменить SSH-порты.

Ресурсы, которые использовал

  1. Как включить SSH в Ubuntu 20.04 (Routerus):https://routerus.com/how-to-enable-ssh-on-ubuntu-20-04/

  2. Коротко об SSH / Хабр: https://habr.com/ru/sandbox/166705/

  3. Что такое SSH (блог REG.RU): https://help.reg.ru/support/hosting/dostupy-i-podklyucheniye-panel-upravleniya-ftp-ssh/chto-takoye-ssh

This page is about the OpenSSH ssh command on Unix/Linux or the Mac terminal. For general information about SSH and other implementations, see the SSH protocol home page.

Practically every Unix and Linux system includes the ssh command. This command is used to start the SSH client program that enables secure connection to the SSH server on a remote machine. The ssh command is used from logging into the remote machine, transferring files between the two machines, and for executing commands on the remote machine.

quantum-safe secure file transfer, quantum-safe tunneling, quantum-safe secure remote access

SSH Command in Linux

The ssh command provides a secure encrypted connection between two hosts over an insecure network. This connection can also be used for terminal access, file transfers, and for tunneling other applications. Graphical X11 applications can also be run securely over SSH from a remote location.

Other SSH Commands

There are other SSH commands besides the client ssh. Each has its own page.

  • ssh-keygen — creates a key pair for public key authentication

  • ssh-copy-id — configures a public key as authorized on a server

  • ssh-agent — agent to hold private key for single sign-on

  • ssh-add — tool to add a key to the agent

  • scp — file transfer client with RCP-like command interface

  • sftp — file transfer client with FTP-like command interface

  • sshd — OpenSSH server

Using the Linux client

Linux typically uses the OpenSSH client. The ssh command to log into a remote machine is very simple. To log in to a remote computer called sample.ssh.com, type the following command at a shell prompt:

ssh sample.ssh.com

If this is the first time you use ssh to connect to this remote machine, you will see a message like:

The authenticity of host 'sample.ssh.com' cannot be established.
DSA key fingerprint is 04:48:30:31:b0:f3:5a:9b:01:9d:b3:a7:38:e2:b1:0c.
Are you sure you want to continue connecting (yes/no)?

Type yes to continue. This will add the server to your list of known hosts (~/.ssh/known_hosts) as seen in the following message:

Warning: Permanently added 'sample.ssh.com' (DSA) to the list of known hosts.

Each server has a host key, and the above question related to verifying and saving the host key, so that next time you connect to the server, it can verify that it actually is the same server.

Once the server connection has been established, the user is authenticated. Typically, it asks for a password. For some servers, you may be required to type in a one-time password generated by a special hardware token.

Once authentication has been accepted, you will be at the shell prompt for the remote machine.

Specifying a different user name

It is also possible to use a different username at the remote machine by entering the command as:

ssh alternative-username@sample.ssh.com

The above can also be expressed with the syntax:

ssh -l alternative-username sample.ssh.com

Executing remote commands on the server

The ssh command is often also used to remotely execute commands on the remote machine without logging in to a shell prompt. The syntax for this is:

ssh hostname command

For example, to execute the command:

ls /tmp/doc 

on host sample.ssh.com, type the following command at a shell prompt:

ssh sample.ssh.com  ls /tmp/doc

After authenticating to the remote server, the contents of the remote directory will be displayed, and you will return to your local shell prompt. -x Disables X11 forwarding.

SSH client configuration file

The ssh command reads its configuration from the SSH client configuration file ~/.ssh/config. For more information, see the page on SSH client configuration file.

openssh, open-source ssh, openssh supportConfiguring public key authentication

To configure passwordless public key authentication, you may want to create an SSH key and set up an authorized_keys file. See the pages on ssh-keygen and ssh-copy-id for more information.

Configuring port forwarding

Command-line options can be used to set up port forwarding. Local fowarding means that a local port (at the client computer) is tunneled to an IP address and port from the server. Remote forwarding means that a remote port (at the server computer) is forwarded to a given IP address and port from the client machine. See the page on configuring port forwarding on how to configure them.

OpenSSH also supports forwarding Unix domain sockets and IP packets from a tunnel device to establish a VPN (Virtual Private Network).

SSH command line options

Some of the most important command-line options for the OpenSSH client are:

-1 Use protocol version 1 only.

-2 Use protocol version 2 only.

-4 Use IPv4 addresses only.

-6 Use IPv6 addresses only.

-A Enable forwarding of the authentication agent connection.

-a Disable forwarding of the authentication agent connection.

-C Use data compression

-c cipher_spec Selects the cipher specification for encrypting the session.

-D [bind_address:]port Dynamic application-level port forwarding. This allocates a socket to listen to port on the local side. When a connection is made to this port, the connection is forwarded over the secure channel, and the application protocol is then used to determine where to connect to from the remote machine.

-E log_file Append debug logs to log_file instead of standard error.

-F configfile Specifies a per-user configuration file. The default for the per-user configuration file is ~/.ssh/config.

-g Allows remote hosts to connect to local forwarded ports.

-i identity_file A file from which the identity key (private key) for public key authentication is read.

-J [user@]host[:port] Connect to the target host by first making a ssh connection to the pjump host[(/iam/jump-host) and then establishing a TCP forwarding to the ultimate destination from there.

-l login_name Specifies the user to log in as on the remote machine.

-p port Port to connect to on the remote host.

-q Quiet mode.

-V Display the version number.

-v Verbose mode.

-X Enables X11 forwarding.

A little history

SSH replaced several older commands and protocols in Unix and Linux the 1990s. The include telnet, rlogin, and rsh.

SSH runs at TCP/IP port 22. This is right between ftp and telnet, which are 20 years older. Read the story of how SSH got port 22.

The following video summarizes how and why SSH was originally developed.

SSH history with Tatu Ylonen

Blog

Представим, что вы арендовали облачный сервер на cloud.timeweb.com для того, чтобы разместить на нем сайт. После покупки вы получите чистую систему, которую предстоит настраивать — устанавливать веб-сервер, загружать файлы и так далее. Для этого не нужно ехать в дата-центр с флешкой, в таких случаях используется протокол SSH.

Как Пользоваться Ssh (1)

SSH (от английского secure shell — защищённая оболочка) — это протокол для удалённого доступа к любым устройствам с операционной системой Linux: компьютерам, серверам, телефонам и так далее. Иными словами, это некий набор правил, позволяющий устанавливать соединение с устройством, которое физически расположено в любой точке мира. 

Слово secure в названии протокола значит, что обмен данными между устройствами шифруется, а значит вы можете работать с чувствительной информацией — паролями, кодами доступа и так далее. 

Image3

Информация передаётся в зашифрованном виде, таким образом повышается безопасность обмена данными, с которыми вы работаете. Соединение и аутентификация осуществляются одним из двух способов:

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

В статье рассмотрим возможности протокола, синтаксис SSH-команд и настройки демона SSH. 

Вход в систему с помощью ключей

Использовать пароль входа на сервер по протоколу SSH — небезопасно и неудобно. Во-первых, пароль можно подобрать перебором. Во-вторых, может произойти случайная утечка, ведь устройств может быть несколько, а значит и пароли разные, все не запомнить. А в-третьих, это утомительно — каждый раз вводить кодовое слово перед началом сеанса. 

Самый надёжный способ — входить в систему с помощью пары ключей RSA. 

Сначала нужно создать ключи на локальном компьютере:

ssh-keygen -t rsa

Image1

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

Затем нужно отправить на сервер публичный ключ; на его публичность указывает суффикс .pub и права на чтение для всех пользователей:

ssh-copy-id -p 222 -i ~/.ssh/id_rsa.pub remote@example.com

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

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

  1. PasswordAuthentication no — запрещаем вход с паролем.
  2. PubkeyAuthentication yes — разрешаем аутентификацию по ключам SSH. 
  3. ChallengeResponseAuthentication no — отключаем PAM-аутентификацию

После обновления файла перезагружаем демон SSH:

sudo systemctl reload ssh

Настройка SSH

Чтобы выполнить подключение, на удалённом устройстве должен быть запущен сервер sshd, в Ubuntu он запускается с помощью диспетчера systemd:

sudo systemctl start ssh

Конфигурация сервера sshd находится в файле /etc/ssh/sshd_config. Рассмотрим основные параметры настройки SSH, которые вы можете использовать. 

Image2

Порт. По умолчанию sshd отслеживает изменения на 22 порту. Часто злоумышленники пытаются получить доступ к вашему устройству перебором паролей от суперпользователей — root, admin и так далее. Можно усложнить эту задачу и изменить стандартный порт на любой другой с помощью директивы Port.

Однако это не гарантирует полную безопасность, так как существуют скрипты, сканирующие порты устройства. Они определят порт, который «слушает» демон sshd, и всё равно попытаются заполучить доступ. Для большей безопасности рекомендуем закрыть SSH для root-пользователя.

Доступ суперпользователя. Поскольку в основном SSH используется для администрирования удаленных серверов Linux, по умолчанию во всех современных системах удалённый доступ суперпользователя root разрешён. Но это очень небезопасно, так как злоумышленники могут попытаться подобрать пароль и, если смогут попасть в систему, получат полный контроль над устройством. Для того, чтобы избежать таких сценариев, используйте директиву PermitRootLogin со значением no

Протокол. SSH может работать по двум версиям протокола — 1 и 2. Вторая поддерживает больше методов шифрования и способов аутентификации. Если вы хотите использовать только одну из версий, используйте директиву Protocol: Protocol 2.

Доступ только нескольким пользователям. Ещё больше увеличивает безопасность разрешение удалённого доступа только для определённых пользователей и групп — директивы AllowUsers и AllowGroups соответственно. Так, мы можем запретить доступ к серверу всем, кроме администраторов:

AllowUsers adm1, adm2

или 

AllowGroups admin, infrastructure

Вы также можете запретить доступ конкретным пользователям с помощью DenyUsers и DenyGroups

Сохранение ошибок. Уровень логгирования можно задать с помощью директивы LogLevel. Она отвечает за уровень наполнения системного журнала, то есть насколько подробно sshd будет будет сохранять сообщения, которые регистрирует. По умолчанию используется INFO, но в отладочных целях можно поставить VERBOSE или вовсе отключить журналирование QUIET.

Доступ по паролю. За возможность попасть на удалённое устройство с помощью пароля отвечает директива PasswordAuthentication со значениями yes (по умолчанию) или no.

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

sudo systemctl reload ssh

SSH-клиенты

На Windows-системах вы также можете использовать SSH для подключения к удалённому серверу с помощью специальных приложений. Они удобны тем, что позволяют запомнить данные для подключения или указать разные цветовые схемы для разных сеансов (полезно, когда вы администрируете несколько серверов). Среди наиболее популярных:

  1. PuTTY
  2. WinSCP
  3. Termius
  4. FileZilla — для передачи данных по SFTP
  5. MobaXterm

Если вы работаете в unix-системах, можно использовать простой терминал или командную строку.

Синтаксис

Для удалённого подключения нужно использовать команду SSH с указанием IP-адреса или доменного имени сервера:

ssh example.com

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

ssh remote@example.com

Завершить сеанс можно с помощью команды exit.

Если при настройке удалённого сервера вы указали порт отличный от 22, то на локальном устройстве вам нужно указать его при подключении, сделать это можно с помощью флага -p:

ssh -p 222 remote@example.com

Сценарии использования

Ниже рассмотрим частые и наиболее интересные сценарии использования протокола SSH.

Передача файлов и каталогов

Если на вашем сервере настроен демон sshd, вы также можете пользоваться другими утилитами, которые работают на основе протокола SSH. Одна из таких утилит — scp, которая использует протокол RCP для передачи файлов. 

Для того, чтобы передать файл filename.txt на устройство с адресом example.com и расположить его в каталоге ~/trash/txt, используйте следующую команду:

scp filename.txt remote@example.com:~/trash/txt

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

Когда нужно передать весь каталог, добавьте флаг -r. При путь к каталогу, в который вы собираетесь копировать данные, должен завершаться косой чертой. 

Представим, что нам нужно скопировать каталог images с сервера себе на компьютер в папку documents:

scp -r remote@example.com:~/images ~/documents/

Вы также можете передавать файлы между двумя удалёнными машинами, указывая вместо локальных файлов путь подключения к серверу. 

SSH-туннели

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

Для того, чтобы пробросить порт с удалённого сервера, используйте флаг -L. Для примера рассмотрим случай, когда нам нужно разрешить работу с удалённой базой данных, которая доступна только на локальной машине, порт 3306. 

Для этого выполним следующую команду:

ssh -N 53306:127.0.0.1:3306 remote@example.com

В этой команде флаг -N означает, что на удалённой машине не нужно выполнять команду, 53306 — локальный порт, 127.0.0.1:3306 — адрес, на котором работает сервис MySQL на удалённом сервере.

Подробнее об SSH-туннелях читайте в нашей статье.

SFTP

SFTP (Secure File Transfer Protocol) — протокол передачи файлов, который работает поверх безопасного канала и является частью OpenSSH, поэтому если у вас корректно работает демон SSH, вы можете использовать SFTP без дополнительной настройки. Главное отличие SFTP от стандартного протокола FTP — шифрование абсолютно любой информации.

Создать сеанс SFTP можно с теми же доступами — логином и паролем или ключом — что и SSH. Кроме этого можно указать порт, если вы меняли его со стандартного 22 на какой-либо другой. Сделайте это с помощью команды:

sftp -oPort=222 remote@example.com

После успешной аутентификации вы окажетесь на удалённом сервере и сможете работать с файлами. 

Заключение

В статье мы разобрали, что такое протокол удалённого управления компьютером и как работает SSH. Знание основ работы этого протокола — незаменимый навык в работе системного администратора и программиста. SSH позволяет подключиться к устройству в любой точке мира и при этом иметь те же самые права и возможности, что и при физической работе с компьютером. 

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

Любой сервер, который вы арендуете на cloud.timeweb.com, будет доступен по SSH по умолчанию. А если вам необходимо дополнительно его настроить, наши специалисты всегда на связи.


Copyleft Andrey Lavrentyev


����������.

������ ����������� ���� �������� �� ������ ������������� ssh ������ 1.2.x ��������� SSH1.5.
�� ��� ������ ����� ���� ������������ � ��� ������ � ssh ������ 2.x, ���
������������� ��������� SSH2.

 ����������� ���� �������� ����� ����� �� ������ ���� ��������� �������.
�������� �� ������ UnixGems — ��������� Unix, � �������� ������������
������������ Unix, � ���������� ����� �� ������� ������� �������� � ���������
��� �����������.

����������: ���� �������� ���� �� ���� ������������, � ��������
��������� �������� � �������������� ssh ������ 2.x, � ������ ����� ���
������� ��� �����������. ���� � SSH2.x ����� ������� � �������� ��������
� �� ����� ������ � ��������� ��� �������������.

  1. ������� � ������ SSH.
  2. � ���������� ������� ��������� ������.
  3. �������� ������
    ����� ������������ � ��������� ��������� �����
  4. ����������� �������,
    ���������� � �����.
  5. ���� �� ���������
    �������.
  6. �������� ������
    ����������� � ������.
    • ������
      ������� X11 �� ��������� �������.
    • ������
      ������� X11 ����� ������ xdm.
  7. ���������� �������
    ����������� � ������.
  8. ������ ������ ��
    ��������� �������.
  9. ����������� ������
    ����� ���������.
  10. ��������� �����������
    ��������.
  11. ��������� ssh-agent � CDE.
  12. SSH � ���������.
  13. ��������� ��������.
  14. ������� SSH ��� Windows.
  15. ������ �� ������
    �������� ��������� ����������.

������� � ������ SSH.

SSH � ������������ ������ �������� �������������:

  • �������� ������������� �� ������ ����� �����, ������ — hosts
  • �������� ������������� �� ������ ������������
    �������:

    • /etc/hosts.equiv.rhosts/.shosts
       ���� ������� � ����������-������� �� rsh/rlogin.
    • XAUTHORITY — ���� ��������� ������ SSH, � X-Window ��
      ����� � ������������ ��� ����� XDM.
    • RSA — ������������, ���� SSH ������ � ���������� RSA.
    • �������� ������������� ����������� «public key».
    • �������� ������ ����� �� ��������� ������� ������������ � SSH,
       ��-��������� — IDEA.
    • ������������� ��������� ����� — passphrase.
  • ���������� ������ SSH � ������� �������� �������� ������������,
     TIS, Kerberos, SSL, C2 � ��� �����, ��������� ��. ������������ SSH.

������� ��� SSH �������� ��������� ���������� ������<->������,
����������� ��� ������������ �������� ���������� �� ��� ��� ������. :(

� ������ ������������� SSH, ������ ���������� ���������� ��������
���:

         Client (workplace)  <---------------->  Server (remote machine)

          ssh/slogin/scp     <---------------->    sshd

Client ��������� � �������� �������� ����� ������������, �� ��� �����������
������ ���� ��������� «public key»«private key», � �� �������
��������� ������, ���� �� ����� ����� ���������� ����, ������ ���� �������
����� SSHD, ����� ������� ��������� ������ �������� �������� — Server.

���� ������������ � �������� workplace — �������� ����� �����
������������ ������ ������ — Client, ��������������, �� ������ �� ���
���������� ��������� ssh-keygen. � �������� �������� ����� ����� ����
������������� ������������ ���������, ������� � �� � ��.

����� ������������ ����� ���������� ���������:

         Client (workplace)  <---------------->  Server (remote machine)

          ssh/slogin/scp     <---------------->    sshd

  $HOME/.ssh/                         |          $HOME/[.ssh/]
            /[authorized_keys]        |               /.Xauthority
            /identity                 |               /.rhosts[.shosts]
            /identity.pub             |                     /[authorized_keys]
            /known_hosts              |                     /[identity]
            /random_seed              |                     /[identity.pub]
                                      |                     /[known_hosts]
                                      |                     /[random_seed]

�� ������ ����� ��� ��������, [] — ������� ��� � ������,
���������� ��������������, �� ��������� �����������, � ����������� ��
���������������� ��������, �� ��������, Server ����� ���� � ����
������� Client, � ��� ������, ���� ������������ ����� �����������
���������� [� ������� �� ����������] ������� � ����.

� ���������� ������� ��������� ������.

���������� ������� ���������� ����� ���������� «public key» ���
�������� � «private key» ��� ���������� ������. ��� ������ «public key» ��������� �� ��� ����, ��� ������������ ���� ����� ����� ��� ������
�� ������������ ����-�������� ������ ��� ���� ����������, ��� ���������
������ �� ������������ ������ ����������.

��� ��������, ��� ��� ��������� �������� ������ «public key» ���
����������� ����� $HOME/.ssh/identity.pub �� �����������
����� ��� ������� �������� ���������� �������������� ���������� �������
����� �� �������� ��� ������ � ���� $HOME/.ssh/authorized_keys
�� ��������� �������.

���� ���-���� ����� �������� ������������������� ������ � ����� ������
��� ��������������� ����� ������ ��� �����������, �� ��� ���������� �������
�������� ������ � ������ ������� ����� $HOME/.ssh/identity
� �������������� ����������� ��� ��� ������������� ������ ������ ����.

������ ��� ������� ������ ������ «private key», ��� ��� ���������
� ������� ��������� keygen ���������� ������ passphrase
���������-����� ��� �������� ����������� �����, ����� �� ����� ������������
�� �������� �������. ��� ������ ������������� �� ���������� ������� �����
���� ���� ���-���� ����������� � ���� �������� ���������� � ������.

�������� ������ ����� ������������
� ��������� ��������� �����.

����, ������ ��� ��� ���������� ������� — ��� ������������ ������� ssh-keygen
��� �������� ����������� ������ �����������. ���������� ������ ���������
��� �������, ����� �������������� � ���� ������� ��-��������� ������ �������������
��� �����������.

�����, ����� �������� ssh-keygen ������� ���������� � ���������
�����-������[passphrase],
������� ������ ������������� ��������� �������������:

  • ��������� ������������������ ��������� ����
  • ������� � �����, ���� ����� ����� ����������� ���������; ��� �� ������
    �����������, �� � �������������� � ����� ���������� �����������
  • �������� ��������� ����� �� ������� ��������� ������������(��������������
    � �� ��������� ������ ���� ��������)
  • �������� ��������� ����� � ������ �� ����� ��� �������� ����� ���� � ����
    ��������� ������-�����. ��� �������� ���������� ������������� ����
    ������������ ����� ��������������� ���� ������-�����, ��� �������� ����� ��� ���� � ��� ������ ���� — «private key».

����� �������� ������ �������� �������, ���������� ����� � �� �����������:

/* �� �������� ��� �������� passphrase �� ������������� */

unix1% ssh-keygen
 Initializing random number generator...
 Generating p:  .............................................++ (distance 830)
 Generating q:  .......................................++ (distance 636)>
 Computing the keys...
 Testing the keys...
 Key generation complete.
 Enter file in which to save the key ($HOME/.ssh/identity):
 Enter passphrase: pust' vsegda 2000
 Enter the same passphrase again: pust' vsegda 2000
 Your identification has been saved in /home/lavr/.ssh/identity.
 Your public key is:
 1024 37 [lots of numbers] lavr@unix1
 Your public key has been saved in /home/lavr/.ssh/identity.pub
unix1%

���� �� ������ ��������� accounts (������ � ������ �������), �� ������
������� ��������� ��������� � ������ ������ ��� ������� �� ���, ��������:

  • ��� ������
  • ��� ������ �������
  • ��� Internet service provider (ISP) �������
  • ��� �����������
  • ��� ������-������������������ ������ ��� ����������

��� ������������� ��������� ����������� ���������� ������ ����� ����� �������������,
�������� ������������� ������� �� ����� � ������ � ����������� �������������������
������ �� ��������������� ����������

������� ��� ��� �������������, �� ������ ������ �������� ���� ������-�����
�������� ������� ssh-keygen � ������ -p , ��������:

/* �� �������� ��� �������� passphrase �� ������������� */

unix1% ssh-keygen -p
 Enter file in which the key is ($HOME/.ssh/identity): 
 Enter old passphrase: pust' vsegda 2000
 Key has comment 'lavr@sunhe'
 Enter new passphrase: budet new 3000
 Enter the same passphrase again: budet new 3000
 Your identification has been saved with the new passphrase.
unix1%

����������� �������, ���������� � �����.

��� ���� ����� ��������� ��� ���������� ������ ������ � ������� ��������
�������� ������ ���������� ������� ���� $HOME/.ssh/authorized_keys
� ������� ��������� ������ «public key» ��� ������ ������� ��������
������.

������ ������������ ����� ����� �������������� ������ �� _���������_
������� ��������� ��������� ����(���� ����� ����� ��� ��� ������������
����� ����������� �������� ���������� � �������������� NFS) � ������ ������
���������� ������ ����������� ���� $HOME/.ssh/identity.pub
«public key» � ���� $HOME/.ssh/authorized_keys.

unix1% cd ~/.ssh
unix1% cp identity.pub authorized_keys

������ �� ������ ����������� ���� authorized_keys �� ������ ���������
������� ����� ��������� ������ � ��� � ��������� �������. �������� ���
���� �� ������ �� ftp ��� ����� rcp/scp.

��� ��������� ������� � ����� ��� �������� � ������ �������� �� ������
�������� �������������� ��� ���� authorized_keys ��������� ���������
��������. �������, ��� ������ ���� — ��� ���� ������ �����, � ����� ��
��� ����������� ���� ����� ������ «public key» �� ������ � �����������
pub.

������ ������� �� ������� ������� � ����� ����� ������, �� ��������
� ���, � �������� ������� ������������ ����� ������ � ����������� ������.

���� ����� ���� ����������� �����������, ��������� ������� ����������
��� � �������, ���������� ��������� ����� � ������ � ����������� � ������
��������� � SSH:

� ~/.ssh
� ~/.ssh/authorized_keys

����� �� ������ ������ ���� ������ � ��� — ���������. ��������� ������
���������� ������ ��� ������ ����:

unix1% cd
unix1% ls -ld . .ssh .ssh/authorized_keys
 drwxr-xr-x  36 lavr  dug  4096 Jul 25 02:24 .
 drwxr-xr-x   2 lavr  dug   512 Apr 10 02:30 .ssh
 -rw-r--r--   1 lavr  dug  1674 Apr 10 02:29 .ssh/authorized_keys
unix1%

����� ��������� ������� ��������� ��������� ������ �� ������ ���������
����� �� ������ ���� �� ����������� ���������:

unix1% cd
unix1% chmod go-w . .ssh .ssh/authorized_keys
unix1%

���������, �������� ��� ��������� �� ���� ������� �� �������� ������ ������
�� ���� ����� accounts.

����������:

������ ����������� ���� �������� ����� �����, ��������� ��� ������ ����
��� ������������, � ������� ��������� �������� ����� �� ������ �������������.

������ ������, ������ ���� — ���� identity, ������ ������
����� ����� 0600, ��������� �� ���� ���������� � ������ �� ������
��������� � ��������� � ������������, ��, �� � ������� ���� � «public key»identity.pub==0644.

� �� ��������� ����� ����� �� ���������� $HOME/.ssh==0700
, � �� ���������� �������[������ �������� ��� � ���� .ssh==755]:

unix1:/home/lavr> ls -la .ssh
total 42
 drwxr-xr-x   2 lavr  dug    512 26 ��� 06:50 .
 drwxr-xr-x  61 lavr  dug   5632  6 ��� 22:45 ..
 -rw-------   1 lavr  dug    672 26 ��� 06:39 authorized_keys
 -rw-------   1 lavr  dug    539 26 ��� 06:39 identity
 -rw-r--r--   1 lavr  dug    343 26 ��� 06:39 identity.pub
 -rw-------   1 lavr  dug  31654 29 ��� 11:49 known_hosts
 -rw-------   1 lavr  dug    512  6 ��� 22:45 random_seed
unix1:/home/lavr>

����� ������ �������� � ����������� �������� ����� ���� $HOME/.ssh/authorized_keys �������� ������ � �������������� ���������, ��� ������
unix1Client, � ��������� ������ unix2 [������ ��� — mammoth]cvServers:

         Client (workplace)  <---------------->  Server (remote machine) 
          ssh/slogin/scp     <---------------->    sshd

 unix1:~lavr/.ssh/                     unix2:~lavr/.ssh/
                 /[authorized_keys]  |                  ������� 
                 /identity           |                  
                 /identity.pub       |                 
                 /known_hosts        |                 
                 /random_seed        |                 
                                     |                 
                                     |                

������ ��� �� ����� ������� — ���������, ���������� �� ��������� ������
��������� SSH, �� ���� �������� �� �� ��� ������sshd.
��� ����� ��� ���������� ��������������� �������� telnet � ��������� �����
— 22, ������ ���� ���� ������������ SSH ��-���������:

unix1:/home/lavr> telnet unix2 22
Trying 159.93.17.122...
Connected to unix2.jinr.dubna.su.
Escape character is '^]'.
SSH-1.5-1.2.27

^^^^^^^^^^^^^^- � ��� �� ����� ���������, � ������� �������� �� ������ sungraph

unix1:/home/lavr> telnet sungraph 22
Trying 159.93.20.105...
telnet: Unable to connect to remote host: Connection refused
unix1:/home/lavr> telnet sungraph 
Trying 159.93.20.105...
Connected to sungraph.jinr.dubna.su.
Escape character is '^]'.


SunOS UNIX (sungraph)

login: Connection closed by foreign host.
unix1:/home/lavr> 

����� ��� �� ��������� ������ sungraph ����������� ����� sshd
� ��� ������ ��� �� �� ����� ��������� ��������������� SSH.

����� �������� ��� ���� SSH �������������� � ���������� rsh/rlogin �� � ������ ������� ����� �� ��������� ������ ��� SSH, slogin
����� ���������� �� ����������� ����� /etc/hosts.equiv � .rhosts,
�������, ���� ������ ����� �������� � ��� ����������� �� ��������� ������ �
sshd — �������, �� ������� ������������ ������ �����������, ����� �����
������������.

���� ��� �� ���� �� ��������� ������ unix2 ���������� .ssh � � ����� ������ ���� ��������������� SSH ��� ����������� ����� �
��������� ������ �� unix2, ������, ��������� �� ��������� ������ unix2:

mammoth:/usr/home/lavr> ls -la .ssh
ls: .ssh: No such file or directory
mammoth:/usr/home/lavr> 

���������� ����� � unix1 �� unix2:

unix1:/home/lavr> slogin -v unix2
SSH Version 1.2.26 [i386-unknown-freebsd2.2.8], protocol version 1.5.
Compiled with RSAREF.
unix1.jinr.dubna.su: Reading configuration data /usr/local/etc/ssh_config
unix1.jinr.dubna.su: ssh_connect: getuid 310 geteuid 0 anon 0
unix1.jinr.dubna.su: Connecting to unix2 [159.93.17.122] port 22.
unix1.jinr.dubna.su: Allocated local port 787.
unix1.jinr.dubna.su: Connection established.
unix1.jinr.dubna.su: Remote protocol version 1.5, remote software version 1.2.27
unix1.jinr.dubna.su: Waiting for server public key.
unix1.jinr.dubna.su: Received server public key (768 bits) and host key (1024 bits).
unix1.jinr.dubna.su: Host 'unix2' is known and matches the host key.
unix1.jinr.dubna.su: Initializing random; seed file /home/lavr/.ssh/random_seed
unix1.jinr.dubna.su: Encryption type: idea
unix1.jinr.dubna.su: Sent encrypted session key.
unix1.jinr.dubna.su: Installing crc compensation attack detector.
unix1.jinr.dubna.su: Received encrypted confirmation.
unix1.jinr.dubna.su: Trying rhosts or /etc/hosts.equiv with RSA host authentication.
unix1.jinr.dubna.su: Remote: Rhosts/hosts.equiv authentication refused: client user 'lavr', server user 'lavr', client host 'unix1.jinr.dubna.su'.
unix1.jinr.dubna.su: Server refused our rhosts authentication or host key.
unix1.jinr.dubna.su: Connection to authentication agent opened.
unix1.jinr.dubna.su: Trying RSA authentication via agent with 'lavr@unix1.jinr.dubna.su'
unix1.jinr.dubna.su: Server refused our key.
unix1.jinr.dubna.su: RSA authentication using agent refused.
unix1.jinr.dubna.su: Trying RSA authentication with key 'lavr@unix1.jinr.dubna.su'
unix1.jinr.dubna.su: Server refused our key.
unix1.jinr.dubna.su: Doing password authentication.
lavr@unix2's password: 
^^^^^^^^^^^^^^^^^^^^^^--- ������ ������ � ������� �� unix2.

unix1.jinr.dubna.su: Requesting pty.
unix1.jinr.dubna.su: Failed to get local xauth data.
unix1.jinr.dubna.su: Requesting X11 forwarding with authentication spoofing.
unix1.jinr.dubna.su: Requesting authentication agent forwarding.
unix1.jinr.dubna.su: Requesting shell.
unix1.jinr.dubna.su: Entering interactive session.
Last login: Fri Apr  7 15:33:57 2000 from unix1.jinr.dubna
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

FreeBSD 2.2.8-STABLE (MMTH) #0: Sun Jan  9 22:37:00 MSK 2000

Welcome to FreeBSD!

Handbook is in /usr/share/doc/handbook and the FAQ in /usr/share/doc/FAQ.
lynx /usr/share/doc/handbook & lynx /usr/share/doc/FAQ.

No new messages.
mammoth:/usr/home/lavr>

����� ����� �������� ������ ���� � ������������. ������� �������� ���
��������� ������ �� ��� ���� ��������� � ���� ������ ��� ��������������
SSH ������� ��������� �������� ������ � ���� ����� �������������
���������� � ��������� �������, �� �������� ���� ������ ���� �����������. �
���������� ����������� �� 22-��� �����.

������ ������� ����������� ��������� «public key» ������������
lavr � ���������� ������ unix2unix1:~lavr/.ssh/identity.pub ��� ������������� ������ �� ������ unix2.

��� ����� ���������� �� ��������� ������ unix2 ������� ���� ~lavr/.ssh/authorized_keys � ��������� � ���� «��������� ����»
������� ��� ��������� � ����� unix1:~lavr/.ssh/identity.pub.

���������� ����������, ����������� ������� authorized_keys:

������ ����������� ����� unix1:~lavr/.ssh/identity.pub

---------------------------- identity.pub ------------------------------------
1024 33 123455613571294786678234678124109412884011689992618043976213690319207626
04778809267037467162812346789078213478908712346796123474787443160033234663145614
49429937525705396999378436889184517007432662261198826716033688101069276271769654
25643258747621735477817990558818651836009050064859034674736459969312463503021 la
vr@unix1.jinr.dubna.su
---------------------------- end of identity.pub -----------------------------

��������� ���� ��������� ���� - ��� ���� ������ ������� ���������� �����������
� ���� authorized_keys �� ������ unix2, ������ ���������� ��� ���������:

      unix1:~lavr/.ssh/identity.pub -> unix2:~lavr/.ssh/authorized_keys

unix2:/home/lavr/.ssh> chmod 0600 authorized_keys
unix2:/usr/home/lavr/.ssh> ls -la authorized_keys 
-rw-------  1 lavr  dug  343  7 ��� 15:18 authorized_keys
unix2:/usr/home/lavr/.ssh> 


         Client (workplace)  <---------------->  Server (remote machine)
          ssh/slogin/scp     <---------------->    sshd

 unix1:~lavr/.ssh/                     unix2:~lavr/.ssh/
                 /[authorized_keys]  |                 /authorized_keys �
                 /identity           | ��������� ������ lavr@unix1
                 /identity.pub       |
                 /known_hosts        |
                 /random_seed        |
                                     |
                                     |

��������� �������� SSH ��� ������������� authorized_keys:

unix1:/home/lavr> slogin -v unix2
SSH Version 1.2.26 [i386-unknown-freebsd2.2.8], protocol version 1.5.
Compiled with RSAREF.
unix1.jinr.dubna.su: Reading configuration data /usr/local/etc/ssh_config
unix1.jinr.dubna.su: ssh_connect: getuid 310 geteuid 0 anon 0
unix1.jinr.dubna.su: Connecting to unix2 [159.93.17.122] port 22.
unix1.jinr.dubna.su: Allocated local port 786.
unix1.jinr.dubna.su: Connection established.
unix1.jinr.dubna.su: Remote protocol version 1.5, remote software version 1.2.27
unix1.jinr.dubna.su: Waiting for server public key.
unix1.jinr.dubna.su: Received server public key (768 bits) and host key (1024 bits).
unix1.jinr.dubna.su: Host 'unix2' is known and matches the host key.
unix1.jinr.dubna.su: Initializing random; seed file /home/lavr/.ssh/random_seed
unix1.jinr.dubna.su: Encryption type: idea
unix1.jinr.dubna.su: Sent encrypted session key.
unix1.jinr.dubna.su: Installing crc compensation attack detector.
unix1.jinr.dubna.su: Received encrypted confirmation.
unix1.jinr.dubna.su: Trying rhosts or /etc/hosts.equiv with RSA host authentication.
unix1.jinr.dubna.su: Remote: Rhosts/hosts.equiv authentication refused: client user 'lavr', server user 'lavr', client host 'unix1.jinr.dubna.su'.
unix1.jinr.dubna.su: Server refused our rhosts authentication or host key.
unix1.jinr.dubna.su: Connection to authentication agent opened.
unix1.jinr.dubna.su: Trying RSA authentication via agent with 'lavr@unix1.jinr.dubna.su'
unix1.jinr.dubna.su: Received RSA challenge from server.
unix1.jinr.dubna.su: Sending response to RSA challenge.
unix1.jinr.dubna.su: Remote: RSA authentication accepted.
unix1.jinr.dubna.su: RSA authentication accepted by server.
unix1.jinr.dubna.su: Requesting pty.
unix1.jinr.dubna.su: Failed to get local xauth data.
unix1.jinr.dubna.su: Requesting X11 forwarding with authentication spoofing.
unix1.jinr.dubna.su: Requesting authentication agent forwarding.
unix1.jinr.dubna.su: Requesting shell.
unix1.jinr.dubna.su: Entering interactive session.
Last login: Fri Apr  7 15:37:05 2000 from unix1.jinr.dubna
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

FreeBSD 2.2.8-STABLE (MMTH) #0: Sun Jan  9 22:37:00 MSK 2000

Welcome to FreeBSD!

Handbook is in /usr/share/doc/handbook and the FAQ in /usr/share/doc/FAQ.
lynx /usr/share/doc/handbook & lynx /usr/share/doc/FAQ.

No new messages.
mammoth:/usr/home/lavr> 

��� � ����������� �������� — ������ ������� �� ��������� ��������� ��
��������� ������� ������������ lavr@unix1. ��� ����� ���� ��������� ��� ������
������������� ������� �� ���������, ������ �������� �� ��������� �����
� ���� authorized_keys ��� ������, ���� �� ���������� ������� ���, ����
��������� ��������. � �������� ������� ��������� ������������ lavr@unix1
unixgems@cv, �� ��� ��� ����� -v, �� ���� ��� ��������:

unix1:/home/lavr> slogin cv -l unixgems
No mail.
No new messages.
[cv]~ > ls -la .ssh
total 6
drwxr-xr-x  2 unixgems      512 Mar 17 15:42 .
drwxr-xr-x 10 unixgems     1024 Apr  7 17:00 ..
-rw-------  1 unixgems     1004 Mar 17 15:45 authorized_keys
-rw-------  1 unixgems      512 Mar 26 16:36 random_seed
[cv]~ > 

��������� ���������� ����� cv:~unixgems/.ssh/authorized_keys:

[cv]~/.ssh > cat authorized_keys 
1024 33 678678123496923479123479165242109412884011689992618043976213690319207626
04778809267037467162833562928533292936139256720809420334787443160033234663145614
49429937525705396999378436889184517007432662261198826716033688101069276271769654
25643258747621735477817990558818651836009050064859034674736459969312463503021 
lavr@unix1.jinr.dubna.su
1024 37 137290359433182513579617890789123467129671297912312761273466645672942194
55970778052199218487445994523144629525988441011878648710134855446588870011860160
77772308703155696414837775201650380942285951978078879612311758535089405534081292
94415364237239835774809190340205754563617283970410932262411362690843796366679 
grom@ultra.jinr.dubna.su
1024 37 130519989598501766767291364712467912674967231401723846127349672134678318
22302017753994633382264332578230406493484282790872111790029413922641217785693235
71826624741446328242429959045190528987359008994056451409547886075549563303970423
73079581597300609261185396227802478893345430979943132249249559815951890929333 
serg@sunhe.jinr.ru
[cv]~/.ssh > id
uid=8333(unixgems) gid=100(dug) groups=100(dug)
[cv]~/.ssh > 

�� ����������� ����� authorized_keys �� ����� ��� ������������
unixgems@cv ��������� �������� ��� ����� account ����� ����������������:

  • lavr@unix1.jinr.dubna.su
  • grom@ultra.jinr.dubna.su
  • serg@sunhe.jinr.ru

�� ����������������� ���� ������������ �� ����
���� ����� ������.

���� �� ��������� �������.

��� �������������� ����� �� ��������� ������� ����� ������������ ����
slogin,
���� ssh �������, ��� ���������� ���� � �� ��. ���������� �������
������ ���� ������� �������� — ��� ��������� �������. �� ���������, ���
������ ��� ������-����� ��� ����� � ���������� �� ����� ������������
��������.

unix1% slogin spp
 Enter passphrase for RSA key 'lavr@spp.jinr.dubna.su': pust' vsegda 2000
 Last login: Wed Oct 16 20:37:00 1996 from idefix
 [more output from the remote machine]
spp%

�� ������ �������� ����������� ��� ����� passphrase �������� ��
����� ����� ������������ � ������. �� ��� ����� �� ������ ��������� ������
passphrase, �� ���� �������, ����� ������ ��������� �� � ������.
(��. ������������� ssh-add)

����������: ������ ������ �� ������������ �����������
passphrase
����� ���� ������� � ������ � ���������� ��������� ���������� � ��������������
��������� � ������ �����, �� � ����� $HOME ����������� ������������ �����
NFS, ���� � ��� ��������� �������� ������� SSH, ���� � ����������
����������� X-Window.

���� ���� ��������������� ��� �� ����� ��������, ��������� � ���������,
�����������, �� ������ ������������ ����� «-l username» ��� ��������
����� �� ��������� �������. ��� ��������:

unix1% slogin -l lavr nusun 
 Last login: Sun Oct 13 14:55:17 1997 from nusun.jinr.ru
 [more output from the remote machine]
nusun%

��� �������� ��������� � ����� ������������ ��� ��������� �������.

���� � ��� �������� �����-���� �������� ��� ����� �� ��������� �������
����������� ����� -v ��� ��������� ���������� ���������� � ��� ����
�������� �������� ����� ���� ��� �� ���������� � ��� ������.

��������:

unix1% slogin -v cv
SSH Version 1.2.22 [i386-unknown-freebsd2.2.5], protocol version 1.5.
Standard version.  Does not use RSAREF.
unix1.jinr.dubna.su: Reading configuration data /usr/local/etc/ssh_config
unix1.jinr.dubna.su: ssh_connect: getuid 310 geteuid 0 anon 0
unix1.jinr.dubna.su: Connecting to cv [159.93.17.13] port 22.
unix1.jinr.dubna.su: Allocated local port 777.
unix1.jinr.dubna.su: Connection established.
unix1.jinr.dubna.su: Remote protocol version 1.5, remote software version 1.2.22
unix1.jinr.dubna.su: Waiting for server public key.
unix1.jinr.dubna.su: Received server public key (768 bits) and host key (1024 bi
ts).
unix1.jinr.dubna.su: Host 'cv' is known and matches the host key.
unix1.jinr.dubna.su: Initializing random; seed file /home/lavr/.ssh/random_seed
unix1.jinr.dubna.su: Encryption type: idea
unix1.jinr.dubna.su: Sent encrypted session key.
unix1.jinr.dubna.su: Received encrypted confirmation.
unix1.jinr.dubna.su: Trying rhosts or /etc/hosts.equiv with RSA host authenticat
ion.
unix1.jinr.dubna.su: Remote: Accepted by .shosts.
unix1.jinr.dubna.su: Received RSA challenge for host key from server.
unix1.jinr.dubna.su: Sending response to host key RSA challenge.
unix1.jinr.dubna.su: Remote: Rhosts with RSA host authentication accepted.
unix1.jinr.dubna.su: Rhosts or /etc/hosts.equiv with RSA host authentication acc
epted by server.
unix1.jinr.dubna.su: Requesting pty.
unix1.jinr.dubna.su: Failed to get local xauth data.
unix1.jinr.dubna.su: Requesting X11 forwarding with authentication spoofing.
unix1.jinr.dubna.su: Requesting authentication agent forwarding.
unix1.jinr.dubna.su: Requesting shell.
unix1.jinr.dubna.su: Entering interactive session.
Last login: Tue Jun 30 08:21:28 1998 from cv.jinr.dubna.su

        Welcome to ConvexOS

    CONVEX computer Corporation

 /cern (CERN Soft) dirs tree
         and
 /local dirs tree
 mounted from BCV due to h/w problem.

 Samba services disabled temporary(?).

        Sorry.

No mail.
Message 107:
From: popovla
Date: Fri Jun 19 11:41:38 1998
Subject: LCTA 2-d floor servers
(8 lines) Display this message? (y)es, (n)o, (q)uit, (h)elp [y]: n
--Flushed--
cv:/home/b17c/lavr> 

��������� slogin ���� ����� ���� ��� ���� �� ssh, ���� ��
��������� ����� �� ��������� ������, ����� ���������� ���:

unix1:/home/lavr> ssh -l lavr unix2
Last login: Fri Apr  7 17:17:55 2000 from unix1.jinr.dubna
Copyright (c) 1980, 1983, 1986, 1988, 1990, 1991, 1993, 1994
        The Regents of the University of California.   All rights reserved.

FreeBSD 2.2.8-STABLE (MMTH) #0: Sun Jan  9 22:37:00 MSK 2000

Welcome to FreeBSD!

Handbook is in /usr/share/doc/handbook and the FAQ in /usr/share/doc/FAQ.
lynx /usr/share/doc/handbook & lynx /usr/share/doc/FAQ.

No new messages.
mammoth:/usr/home/lavr>

�������� ������ ����������� � ������.

���� ��� ���������� ����� ��������� ���������� � ��������� ��������,
�� �������� ����� ������� ��������� ��� ����� ����� ssh-agent. �����
����� ������������ ���������� ������ ������������ ��� ���� ������ ��� ��������
����� ����������.

��� ������� ssh-agent � �������� ��������� ���������� �������
��� ������� ������� ����� �� ��������, ������ ��� ���� ��� shell����
������� ������� ������� �����. ������������� �� ������ �� ����� �������
��� ����� ����� ������� �� ������.

unix1% ssh-agent $SHELL
unix1%

������ ��� ������ �������� �������� ����� � ������ ����� ��� ���� ��������
��� ������ ������.

���������� ������ ������� �����
X11 �� ��������� �������.

���� � ��� ������� ��������� ������ � ������������� � ����������� ������
X-Window
system
, �� ������ �������� ����������� ������� ����� �� � ������� �
������ ��� ������� ����� ssh-agent. ������ X-Window system
����������� ���������� ������� startx � �������������� ��������
�� ��������� — .xinitrc ��� ��� ��� ���������� ���������� �����
xinitrc.

�������� ��� ����� ��������� ���:

unix1% ssh-agent startx &

���� ���� ������� ������� ����� ����������� ������, ��� � ���� �������,
�� �������� ������ ��������� X-Window� ������� ������, ��� �������
�������� ��������������������� ������������ ��� ������ �� ������� � �������
�� ���������� X-Window, ���������� �� ���.

��������� ��������������� ���� ������� ���� ���� ������� ������� X-Window
��� ����� ���������

X11 forwarding:

  1. ������ X11 ������ ����� ssh-agent
  2. ������� ������ � � �������������� ssh-agent

������ ������ ������� � ��� ��� ������������ ���������� � ��������������
������� ���������� ������� ����� �������������� � �������������� ssh-agent.
����� ����� ��������� ����� ������������� ��������� �� ������ ������� �
��������, �������� �������� alias �� ������� startx �� �������
��������:

unix1% ls -la /usr/local[/etc]/.[a-z]*
 -rw-r--r--  1 root  wheel     6 Jun  6  1997 /usr/local/etc/.bash_logout
 -rw-r--r--  1 root  wheel  2361 Dec 29  1997 /usr/local/etc/.bash_profile
 -rw-r--r--  1 root  wheel  1543 Dec 29  1997 /usr/local/etc/.bashrc
 -rwxr-xr-x  1 root  wheel  1267 May 18 13:46 /usr/local/etc/.cshrc
 -rwxr-xr-x  1 root  wheel  1534 Jan 23 14:59 /usr/local/etc/.login
unix1%

�� ���� �������� ������������ � �������� ���������� � �������� SHELL: sh,bash,csh,tcsh,
� ��� � ������� ����� ��������� ��������������� ������� ����������� �������,
������� ������ ��������� � ���������� /etc/skel ��� � ����������� �� �������
� ���� ���������� �� �������� � ����� �������-������� �������� ������������
� ����������� ��������� ���������������, � ������� � ����������� alias
�� startx.

�������:

���������������� ����� ��������� �����:

unix1% cat .cshrc
source /usr/local/etc/.cshrc
unix1% cat .login
source /usr/local/etc/.login
unix1% cat .bashrc
. /usr/local/etc/.bashrc
unix1% cat .bash_profile
. /usr/local/etc/.bash_profile
unix1%

������� �� /usr/local/etc/.bashrc � /usr/local/etc/.cshrc[.login] ��������������
(������ ������ .login ������� �������)

unix1% grep startx /usr/local/etc/.[a-z]*
/usr/local/etc/.bashrc:alias startx='ssh-agent startx'
/usr/local/etc/.cshrc:alias startx  'ssh-agent startx'
unix1%

��������������� ��������� ������������ � � ��������� xinitrc � �������
����������� �������� �� ���������� ������������.

unix1% grep ssh /usr/X11/lib/X11/xinit/xinitrc
#-ssh-auth
 until ssh-askpass | ssh-add -p; do true; done
unix1%

��������� ���� ������ ������ ����������� �� ������������� X-clients
� ������ �������� ���������.

----------------------- cut from xinitrc -----------------------------------
...
until ssh-askpass | ssh-add -p; do true; done

xterm -geometry 80x40+8+9 -name login -ls -sb &
xconsole -geometry 480x130+0-0 -daemon -notify -verbose -fn fixed &
exec fvwm
----------------------- end of cut from xinitrc ----------------------------

������[� �����] ����� ������� � ��� ��� ������������ ����� ������������
������ ���� ������� ��������� ����� — ����� �����, � �������������� ����
.xinitrc.

�������� ���� ���� �������� ���������� ����� ��������� ������� ���������
� ��������������, ���� ������������ ���� ������ ����, ���� ���������� �����
���������� ���������� ������� �����������������, �� ������������ ���������
������������ ����� �������. � ������ ������������ ������ ���� ���������
��������������� �������, ������ �� ������� ���������� �� ������ �� �����������������,
�� � �� ���� � �����.

������ ������ ���������� ���� ���������� �� ������� ��� ������ �����
���� ��������������� ��� ��������, � ������������ ���� ����, � ������ ������
�������������� ������ X-Window ����� ssh-agent, � � ������ ������� ������������
����� ���������� ���� — ��������� ������������� ��� �������� �������, ���
� � �������������� ssh-agent.

������ ��������������� ��������� ������ startx �������� � startX

unix1% mv startx startX

startx ���������� ��������� �������:

#!/bin/sh
if [ -d $HOME/.ssh ]
 then ssh-agent startX
 else startX
fi

��������������� ���������� ������ � � ��������� xinitrc �� ������ x-clients
� �������� ���������

------------------ cut from xinitrc ---------------------------------------
if [ -d $HOME/.ssh ]
 then until ssh-askpass | ssh-add -p; do true; done
fi
------------------ cut here -----------------------------------------------

����������: ��� �������������� ����� �������������� ��������
�������������� � ����������� ���������� ������ X-Window ����� ssh-agent. ���
����� �� ���������� ������� ���������:

unix1% cd
unix1% cp /usr/X11[R...]/lib/X11/xinit/xinitrc .xinitrc

����� �������� ������ «until ssh-askpass | ssh-add -p; do true; done» �
���� .xinitrc, � ������ �����, ������� ���� � � ����������� �� �������������
SHELL �������� alias �� ����� startx, ������� ����.

������ ���������, ��� �������������� �������� ������� X-Window �� ���������
������! [R…] — �������� ��� ���� ������� �� ���� ��� � ����� ������ X-Window
�����������.

���������� ������ X-Window ����� ������
xdm.

���� �� ����� ������� ��� ������� ������� X-Window ����������� ����� �����
XDM, ��� ���������� �������� ����� ������� ��������� ������� ������� �����
�������� ��� ssh-agent. ���������� ������, ����������� ������ � ����������
startx. ���������� ������������� �������� ����� .xinitrc, ������� � ����
������� ����� ���������� �� ���������� ����� .xsession.

� �������� ������� �������� .xsession ����, ssh-agent �������� ������
��� ������� � �������� ���������� ������������ ������������� .ssh.

#!/bin/sh
if [ -d $HOME/.ssh ]
   then EXEC="exec ssh-agent"
   else EXEC="exec"
fi
if [ -x $HOME/.xinitrc ]
   then $EXEC $HOME/.xinitrc
   else $EXEC xterm -geometry 80x24+0-60 -ls
fi

�� �������� ��������� ������ ����� �������� � �������� �� ������������:

unix1% chmod a+x ~/.xinitrc ~/.xsession

����������: ���� ��� ������������� �� ����������� �� ����������
������� ��� ���������� ��������� ���� ����� .xinitrc.xsession, ������
���� � ����� ������� X-Window ����������� ���� — ������������� �������� �����
����������������� � ���������� ��������������. �� ��� ������ ����� �������
���������� � �������������� � �������� ��� ������� � ��� �������� �����
����, �� ������ ������������ �������.

������: ��� ���������� �� ����� ���� ��������� � X-terminal‘� �������
�������� ����� ������ � ������������ ����� ������� � ����.

���������� ������� ����������� � ������.

�� ���� ��� ���� ���������� ����� ������������ ��� ������������� passphrase,
�� ������ ������������ ssh-add ��� ���������� ����������� ������ � ������.
��� ���������� ������� ������ � ������ ��������� ������� �� ����� ����
�������������� �����. � passphrase ����� ���������� ��� ���������� ����
������ � �� ����� ������������ ��� ����� � ����������.

unix1% ssh-add
 Need passphrase for /home/lavr/.ssh/identity (lavr@unix1.jinr.dubna.su).
 Enter passphrase: pust' vsegda 2000
 Identity added: /home/lavr/.ssh/identity (lavr@unix1.jinr.dubna.su)

����� ������� �������� ��� ����� �� identity ��� ����� �������� ��� ������
����, ���� ��� �� ���������� �������� �� ���������, ������ �� ���������
����� ��� ��� ����� ��������� ��� «private key».

����� -d ��������� ������� ����� �� ������, �� �������� ��� � SSH ���
������� «ssh-delete».

unix1% ssh-add -d ~/.ssh/isp

�������� ������ ���� ������� ������ � ������ — ����� -l.

unix1% ssh-add -l
 1024 33 [lots of numbers] lavr@unix1.jinr.dubna.su

�� � ������� �� ������ ������������ ���� -D ��� �������� ���� ������ ��
������.

unix1% ssh-add -D

����� ���������� ���� �� �������� ����� � ������ �� ��������� ������� �
�� ������ ������ ���������� ���������� �� ��� ��� ���� ����� �� ����� �������.

������ ������ �� ��������� �������.

������� ssh ����� ��������� ������� ��� ������������� ������� ��������
��� ������ �� ��������� ������� ��� ������������� �������������� �����
�� ���. ��������� �������� ������� — �����, ����� ���� ��������� � �����������
�� ��������� �������. ���� �������� �������� ������:

unix1% ssh cv who
 ckoch    tty03   Jun 30 14:09
 lavr     ttyp0   Jun 30 11:21   (cv.jinr.dubna.su)
 shchepun ttyp1   Jun 30 14:21   (axpls7.lns.infn.)
 grom     ttyp2   Jun 29 15:27   (unix0.jinr.dubna)
 veron    ttyp3   Jun 30 13:32   (159.93.22.23)
 ruben    ttyp4   Jun 30 13:29   (159.93.17.40)
 grom     ttyp5   Jun 30 12:32   (unix0.jinr.dubna)
 luna     ttyp6   Jun 30 11:38   (dct160.jinr.dubn)
 annask   ttypa   Jun 30 13:40   (xct174:0.0)
 vvm      ttypb   Jun 29 16:18   (cv.jinr.dubna.su)
 smanosh  ttypd   Jun 30 14:03   (bcv.jinr.dubna.s)
unix1%

���� �� ��������� � X-Window System, �� ������ ��������� xterm ���
��������� �������������� ������ �� ��������� ������:

unix1% ssh -n cv xterm & [1] 15866
unix1%

������������� ����� -n ��������� ������ �� ������������ ����� (��������������� � /dev/nul)
� ��������� ssh � ������� ������. ������ �� ����� ������������ ������ �����
������� ���� ��������� ������� �������� ����������� ��� ������ passphrase
��� passowrd.

����������� ������ ����� ���������.

�� ������ ���������� ����� ����� ��������� � ��������� ��������� ���
����� ����� ���������� ��������� ��������� ������� scp � ��� ��� �� �������
������ ���� ������ ����������� �� ��������� �������. ��� �������� �����
�� ��������� ������ ���������� ���� ����� ������ ����� ������� ��� ���������
������ � �������� �� ����� ����������, host:filename.

���� �� �������� ��� ��������� ����� ��� ���������� ��� �����������,
����� ����� �������������� ��� ��������� �����������. ����� ������� ������
������� ����� ���������� ����������� ����� � ��������� � ������� ����������
����������� �����:

unix1% scp -p spp:dead.letter .
unix1%

����� -p �������������, ��� ��������� �� �� ����� ��� �������� �����,
����� �� ����� �����������, ������� � ������ ������ ����������� �� �������������
����������� �����. ������ ��� ��� ������� ������������ ������������� �
������� �� ������ ����� � �����.

unix1% scp -r cv:source src
unix1%

� ������ ������� ����� -r �������� ��� ���������� ���������� �����������
���������� source ������������� �� ������ «cv» � ���������� src �� «unix1».

����� ����� �������� ��� ��� �������� ������:

-C — ����������� � �����������, ������� ��� ��� ������ ������������
������ ����� ��� ����������� ��� ������ ������.

-v — ��� � � ��������� �������� ssh[slogin] ������ ���
������ ���������� ����������.

���������� �������� ��� ������������� ����� �� ��������� � ���������
�������� ����������� �� �������:

  • �� ��������� �� ���� ����������� ������� ����������
  • �� ��������� �� ���� ����������� �������� ���������� ������������
unix1% scp bcv:ftptmp/ftp.out spp:temp/ftp.out.bcv
unix1%

����������: ���������� ��������, ��� ��� ����������� � ���������
������ ��

            ���������, ����������� ���������� ��������������� ����� ���� �����
            �������� ��� ������� ���������.

��������� ����������� ��������.

�������� �� ��������� ����� ��������������� � ���������� ������ �������������
� ����� $HOME/.ssh/config � ���������� ��� ������������ ���������� ����� —
/etc/ssh_config.

������ ������ � ������������ ���������� � ������� ����� HOST. ��� �������
����� �������� ����� ������������ ������� ������������:

  • * ? ������������ ������ �������
  • * * ������������� ������ ��� ������������������ ������ ���������� ��������

������ ������������ ��������� �������� ����� (��������� � ��������):

 Compression yes/no (yes)

       ������������� ���������� � �����������
CompressionLevel 1-9 (6)

       ������� ������: 1 — ����� �������,
9 — ����� ��������� (�����������

       ������������ ����������), �����
����� ������������ �� ��������� �����������

 FallBackToRsh yes/no (yes)

       ���� �� ������� ���������� ���������
���������� � �������������� SSH,

       �������� ������� �� �������������
Rsh, � �������� �� ������� �����������

       ����������� ������ ����� �����������

 KeepAlive yes/no (yes)

       ��������� ������������� ���������
TCP keepalive. ����� ������������,

       ��������� ���������� ������� �����
� ���� � ������������� ���������

       ���������� ��� ������ ��� ������
����������.

 User account (local account)

       �������� ��� �� ��������� �������.
������ �������� ��� ��������������

       ������ ������������� ����� -l.

���� ������ ����� ~/.ssh/config.

Host nusun.jinr.ru

User lavr Compression no

Host sunhe.jinr.ru

User lavr CompressionLevel 6

FallBackToRsh no

KeepAlive yes

Host *

Compression yes CompressionLevel 9

FallBackToRsh yes

KeepAlive no

�� ���������, ��� host-��������� ���������� ������� ���������� �� �������
��������� — ����� ���������� (��-���������), ��, ����� ��������� ��� ssh
������� � ����� ����� ����������������� �����, � ���� ������� ����������
� ������������� �������� ��� �������������� host‘�� � ��������.

�� �������� ������� �����, ��� ��� ���� hosts ������������� ��������
�� ������� ������ — ������� 9, � ��������� �� rsh � ��� keepalive. � ���
�� ����� � nusun �������� ��� account=lavr, � sunhe � ����� ������� �����������
� ����������� �� rsh ��� ��� �������� sshd � ��������� �����.

��� �������� ������� ������ ����� � ������������ ������� ����������� �� ssh/sshd.

��������� ssh-agent � CDE.

���� �� ��������� ����� ���� ������� � �������� ������� �� CDE
����� ssh-agent, ���� �������� ��������� �������:

  • ������ ������:
    • ���������� ����� root-����������, �������� �������: su root
    • ������ �������� �������: cd /usr/dt/bin
    • �������� �������: mv Xsession XsessionA
    • �������� ���� 0005.ssh-addkey
    • ��������� ����� ��������� ����� ����� ����� �� ���������� 0755

    ����������� �����-������, ��������� ����:

    1. ����� ���� Xsession, ssh-agent �������� � ��� ������, ����
    ������������� ������������ ����� �������� ssh-keygen, �� ����������
    ���� $HOME/.ssh/identity.

    ------------------------------ Xsession ---------------------------------------
    #!/bin/ksh
    #
    # This script starts ssh-agent if there is a defined $HOME/.ssh/identity
    # file.
    #
    
    if [ -f $HOME/.ssh/identity -a -x /usr/local/bin/ssh-agent ] ; then
      /usr/local/bin/ssh-agent /usr/dt/bin/XsessionA
    else
      /usr/dt/bin/XsessionA
    
    fi
    --------------------------- end of Xsession -----------------------------------
    

    ����, ����� ��������� ssh-agent ��� ���� ������, ������ ����������
    identity ��� ���������� �� ������������ ����� passphrase, ���
    ����� ������-�����, ssh-add ���������� ��������� � ������ -p:

    � ����������� �� ���� ��� � ��� ���������� CDE, �������� ����
    0005.LOCAL.ssh ���� � ���������� /etc/dt/config/Xsession.d/, ���� �
    /usr/dt/config/Xsession.d/

    2. ��������� ���� 0005.LOCAL.ssh:

    ---------------------------- 0005.ssh-addkey ----------------------------------
    #!/bin/ksh
    #
    if [ x$SSH_AUTHENTICATION_FD != x -o x$SSH_AUTHENTICATION_SOCKET != x 
         -a -x /usr/local/bin/ssh-add ]
    then
      /usr/local/bin/ssh-add
    fi
    ------------------------- end of 0005.ssh-addkey ------------------------------
    
  • ������ ������:

    ��� �� �������, ��������� ��������������.

    • 1. ����������� /usr/dt/config/Xconfig, ��������� ������:
           Dtlogin*session:              /usr/dt/bin/start.Xsession
      
    • 2. ������� ���� /usr/dt/bin/start.Xsession:
      ---------------------------- start.Xsession -----------------------------------
      #!/bin/ksh
       if [ -f $HOME/.ssh/identity -a -x /usr/local/bin/ssh-agent ] ;
         then
             exec /usr/local/bin/ssh-agent /usr/dt/bin/Xsession "$@"
         else
             exec /usr/dt/bin/Xsession
       fi
      ------------------------- end of start.Xsession -------------------------------
      
    • 3. ������� ���� /usr/dt/config/Xsession.d: ------------------------------ Xsession.d ------------------------------------- #!/bin/ksh # The following is needed if ssh-add can't find ssh-askpass: PATH=$PATH:/usr/local/bin if [ "$SSH_AGENT_PID" -a -x /usr/local/bin/ssh-add ] ; then /usr/local/bin/ssh-add < /dev/null fi --------------------------- end of Xsession.d ---------------------------------
    • 4. �������������� ���� /usr/dt/config/C/Xresources:
      �������� ������:
      
           Dtlogin*altDtStart1:          /usr/dt/bin/Xsession
      ��
      
           Dtlogin*altDtStart1:          /usr/dt/bin/start.Xsession
      

      ������ DtLogo.pm ��������� � /usr/dt/appconfig/icons/C/
      � � ���� �������� /usr/dt/config/C/Xresources ������ ��������
      ������:

           Dtlogin*logo*bitmapFile:      /usr/dt/appconfig/icons/C/DtLogo.pm
      

      ������ ������� ������ DtLogo.pm

SSH � ���������.

� ������� SSH ����� �������� ��������� ����������� ��� ����� TCP ������,
� ������� �� UDP. �������� ����� ��������� ����� ������� ������������ ���������
��� POP/SMTP/FTP ��� PPP. ����� ������ ����� �������� ����� �������������,
����� ��������� ���������� ����� ����� � SSH-FAQ ��� � ������������.

����� ���� ���� ��������:
ssh -L 25:smtp.target.domain:25 target &

��������� ��� SMTP

1. myhost$ ssh -L 1234:ftphost.example.com:21 ssh-server

2.
myhost$ ftp localhost 1234
220 ftphost FTP server (Foonix 08/15) ready.
Name: (myhost:yourname):
331 Password required for yourname
Password:
230 User yourname logged in

��� ������ ���������� FTP � ������ myhost �� ������ ftphost
���� ����� �������� ��� ��� ��� ������ �� ��������� ������ myhost,
���������� ����� ��� �������� ����, ������ ��� redirect ����� 1., � ������ ��������������� ��� ������� ftp-client.

����������: ��� ����� ������ ���������� ������� SSH-FAQ.
������ ���� ��� ������� ������� ���������� ��� ������ �� ftp:

  • SafeTP — ������-������ ��� �������� ������ ������.
  • sftp — ������ �� ���� �������������� SSH, ������ ��� OS Unix’es

��������� ��������.

� ������ ������� ���������� ��������� SSH-FAQ, ���� ��� �� ������� �
������� ����� �������, ���������� �������� ����� � mail-������� ssh,
� ���� ������ �������� ������������� �� ������������ ���� bugs.

��� �� ����� �������������� �������:

  1. ��� ������� ������������, ��������� � ��� ��� � ��� ������ ��� ��������
    ������� � ssh �� ������ ������� ������
  2. ��������� ��������� �� �� ����� �� ����� ������� �����.
  3. ��������� ������� SSH ������ �� ��������� �������.
  4. ���������, �� �������� �� ���� HOME-DIR ������������ �� NFS
    ��� ������ ����� � ��� � ��� ����� �� ��� �� ��������� �����, � ����� �� ���
    �� ����������� ��� ��������� ������� �����.
  5. ������ ����� sshd ������� � ������, ��������� �� Solaris — ��������
    `kill -HUP sshd-process-id`
  6. ������ ���������� �������� ����������� ��-�� ������������� ���������
    ��� ���������� SSH c X-Window, ����� � ������� ������� ��������
    ��� GUI: OPENWINX-Window[X11R[N]. ������ ����������
    �������� .Xauthority, ����� ������ ��� �������� �/��� ����� �������� ��� �
    ������� ��������.

������� SSH ��� Windows.

����������: ���� ����� � ������ �����, ������ ��������� — ������ �����.
� ��������� � ���� �� ������� ������� ��� ������������� � OS Unix, � ���
Windows ��� �� ����� �� ����� PC.

���� ����� ����� �������� ������ �����:

  • ������ �� ������� SSH ��� ��������� OS

������ �� ������ �������� ���������
����������

  1. ��� ������� ������ �� �����
  2. ����� ��������� �������� ����� ����� ����������
  3. F-Secure — ������������ ���������� ��� MS Windows
  4. ��������� �������� SSH.
  5. ��������� ������ SSH.


Copyleft Andrey Lavrentyev

Содержание

Эта статья помечена как незаконченная. См. заметку в конце статьи.

Данная статья посвящена клиенту и серверу защищенного терминала (secure shell) в Ubuntu, их настройке и использованию. SSH — это специальный сетевой протокол, позволяющий получать удаленный доступ к компьютеру с большой степенью безопасности соединения. Более подробно про протокол ssh можно прочитать тут.

Описание принципов работы и используемых приложений

В основном, SSH реализован в виде двух приложений — SSH-сервера и SSH-клиента1) В Ubuntu используется свободная реализация клиента и сервера SSH — OpenSSH. При подключении клиент проходит процедуру авторизации у сервера и между ними устанавливается зашифрованное соединение. OpenSSH сервер может работать как с протоколом ssh1, так и с протоколом ssh2. В настоящее время протокол ssh1 считается небезопасным, поэтому его использование крайне не рекомендуется. Я намеренно опускаю различные технические подробности работы протокола, т. к. основной целью данного руководства является описание его настройки и использования. Про сам протокол, принципы его работы, алгоритмы шифрования и т. д. существует множество статей в интернете, например подробно про это можно почитать здесь.

Установка

Установить OpenSSH можно из терминала командой:

sudo apt-get install ssh

В метапакете ssh содержится как клиент, так и сервер, но при этом, скорее всего, будет установлен только сервер, т. к. клиент уже есть в Ubuntu по умолчанию.

Настройка сервера

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

sudo service ssh stop|start|restart 

Основной файл конфигурации SSH-сервера — файл /etc/ssh/sshd_config, доступный для чтения или редактирования только суперпользователю.
После каждого изменения этого файла необходимо перезапустить ssh-сервер для применения таких изменений.

Пример конфигурации SSH-сервера в Ubuntu по умолчанию2):

#     Пример конфигурации open-ssh сервера с русскими      #
#                      комментариями.                      #
#           Написан для http://help.ubuntu.ru              #
#                   by MadKox, 01.2010.                    #
#                                                          #
#                                                          #
# Условные обозначения:                                    #
# Под "по умолчанию" - подразумевается поведение sshd при  #
# неуказанной явно директиве. Стоит заметить, что в Ubuntu # 
# файл sshd_config уже содержит ряд настроек, которые      #
# являются настройками по умолчанию для именно для Ubuntu. #
# Такие настройки указаны в этом файле.                    #
#                                                          #
############################################################
################ Настройки адресов/портов и т.д. ###########
############################################################
#                                                          #
## Port ####################################################
#                                                          #
# Используемый порт. Можно указывать несколько, например:  #
# Port 22                                                  #
# Port 23                                                  #
# Port 24                                                  #
# Рекомендуется использовать нестандартный порт, т.к.      #
# стандартный часто сканируется ботами на предмет          #
# потенциальных "дырок". Может быть опущен, если задан     #
# через адрес. См. также параметр ListenAddress.           #
#                                                          #
Port 22
#                                                          #
## ListenAddress ###########################################
#                                                          #
# Сетевой адрес, на котором "слушает" сервер. Адрес можно  #
# записывать так:                                          #
# ListenAddress host|IPv4_addr|IPv6_addr                   #
# ListenAddress host|IPv4_addr:port                        #
# ListenAddress [host|IPv6_addr]:port                      #
# Если порт не задан, sshd будет слушать на этом адресе и  #
# на порту, указанному в опции Port. Если вы будете        # 
# использовать ListenAddress не указывая порт, то опция    #
# Port должна предшествовать опции ListenAddress. Если не  #
# указывать, то по умолчанию слушает на всех локальных     #
# адресах. Можно указывать несколько адресов.              #
#                                                          #
## AddressFamily ###########################################
#                                                          #
# Указывает, какое семейство IP адресов должно быть        #
# использовано sshd. Возможные варианты:                   #
# “any” - любые                                            #
# “inet” (только IPv4)                                     #
# “inet6” (только IPv6)                                    #
# По умолчанию - “any”.                                    #
AddressFamily inet
#                                                          #
## UseDNS ##################################################
#                                                          #
# Указывает, должен ли sshd проверять имя хоста и          #
# используя это имя сверять IP адрес переданный клиентом с #
# полученным от DNS.                                       #
# Значение по умолчанию - “yes”.                           #
#                                                          #
############################################################
############# Настройки доступа пользователей ##############
############################################################
#                                                          #
# Пустить/не пустить пользователя определяется директивами #
# DenyUsers, AllowUsers, DenyGroups, и AllowGroups.        #
# при этом, проверка проходит сверху - вниз по цепочке:    #
#                   ## DenyUsers ##                        #
#                          ||                              #
#                   ## AllowUsers ##                       #
#                          ||                              #
#                   ## DenyGroups ##                       #
#                          ||                              #
#                   ## AllowGroups ##                      #
# Принимаются только имена пользователей и групп, числовые #
# идентификаторы (UserID) - не распознаются. Корректная    #
# запись нескольких пользователей/групп по очереди, через  #
# пробел. Если записано в виде пользователь@хост - то      #
# пользователь и хост проверяются отдельно, это позволяет  #
# разграничить доступ определенных пользователей с         #
# определенных хостов. Стоит помнить, что директивы        #
# DenyUsers и AllowUsers принимают в качестве параметра    #
# имя пользователя, а DenyGroups и AllowGroups - имя       #
# группы. См. PATTERNS в man ssh_config для дополнительной #
# информации о формах записи имен пользователей и групп.   #
#                                                          #
## DenyUsers ###############################################
#                                                          #
# Список ПОЛЬЗОВАТЕЛЕЙ, которым НЕЛЬЗЯ пользоваться sshd.  #
# По умолчанию - не указан = не запрещен никто. Т.е. если  #
# тут указан пользователь, то ему будет отказано в доступе #
# к ssh серверу.                                           #
#                                                          #
## AllowUsers ##############################################
#                                                          #
# Список ПОЛЬЗОВАТЕЛЕЙ, которым МОЖНО пользоваться sshd,   # 
# По умолчанию - не указан = разрешено всем. Т.е. если     # 
# указан хотя бы один пользователь, ssh доступ к серверу   #
# доступен только для него.                                #
#                                                          #
## DenyGroups ##############################################
#                                                          #
# Список ГРУПП, которым НЕЛЬЗЯ пользоваться sshd.          #
# По умолчанию - не указан = не запрещена ни одна группа.  #
# Т.е. если указана хотя бы одна группа, то пользователям, #
# входящим в эту группу будет отказано в доступе к ssh     #
# серверу.                                                 #
#                                                          #
## AllowGroups #############################################
#                                                          #
# Список ГРУПП, которым МОЖНО пользоваться sshd.           #
# По умолчанию - не указан = разрешено всем. Т.е. если     #
# указана хотя бы одна группа, то только тем пользователям,#
# которые в нее входят будет разрешен доступ к ssh серверу.#
#                                                          #
############################################################
######### Опции определения состояния соединения ###########
############################################################
#                                                          #
## TCPKeepAlive ############################################
#                                                          #
# Указывает, нужно системе посылать TCP сообщения клиенту  #
# с целью поддержания соединения. Если посылать эти пакеты,#
# можно определить разрыв соединения. Однако это также     #
# означает, что соединение может быть разорвано в случае   #
# кратковременного перебоя в работе маршрутизации и        #
# некоторых это сильно раздражает. С другой стороны, если  #
# таких сообщений не посылать - сеансы на сервере могут    #
# длиться бесконечно, порождая пользователей - "призраков",#
# и пожирая ресурсы сервера. Значение по умолчанию - “yes”,#
# т.е. посылать такие сообщения. Для отключения отправки   #
# таких сообщений нужно задать значение “no”. Ранее эта    #
# опция называлась KeepAlive. Стоит заметить, что          #
# существуют более защищенные способы проверки состояния   #
# соединения (см. ниже).                                   #
#                                                          #
TCPKeepAlive yes
#                                                          #
## ClientAliveCountMax #####################################
#                                                          #
# Задает количество сообщений к клиентам, которые sshd     #
# посылает подряд, не получая какого либо ответа от        #
# клиента. Если пороговое значение будет достигнуто, а     #
# клиент так и не ответил - sshd отключит клиента, прервав #
# ssh сессию. Стоит отметить, что использование таких      #
# сообщений в корне отличается от директивы TCPKeepAlive.  #
# Сообщения к/от клиентов посылаются по зашифрованному     #
# каналу и поэтому не подвержены спуфингу. Сообщения же    #
# TCPKeepAlive спуфингу подвержены. Механизм client alive  #
# особо ценен в тех случаях, когда серверу и клиенту нужно #
# знать когда соединение стало неактивным. По умолчанию    #
# значение равно 3. В случае, если ClientAliveInterval     #
# задан равным 15 и ClientAliveCountMax оставлен по        #
# умолчанию, неотвечающие клиенты будут отключены примерно #
# через 45 секунд. Эта директива работает только для       #
# протокола ssh2.                                          #
#                                                          #
## ClientAliveInterval #####################################
#                                                          #
# Задает временной интервал в секундах. Если в течении     #
# этого интервала не было обмена данными с клиентом, sshd  #
# посылает сообщение по зашифрованному каналу,             #
# запрашивающее ответ от клиента. По умолчанию - 0, т.е.   #
# не посылать таких сообщений. Эта директива работает      #
# только для протокола ssh2.                               #
#                                                          #
############################################################
################ Общие опции аутентификации ################
############################################################
#                                                          #
## AuthorizedKeysFile ######################################
#                                                          #
# Указывает файл, в котором содержатся публичные ключи,    #
# используемые для аутентификации пользователей. Директива #
# может содержать маркеры вида %М, которые подставляются в #
# процессе установки соединения.                           #
# Определены следующие маркеры:                            #
# %% - заменяется литералом '%'                            #
# %h - заменяется домашней директорией                     #
# аутентифицируещегося пользователя                        #
# %u - заменяется именем аутентифицируещегося пользователя #
# Таким образом, файл с ключами может быть задан как       #
# абсолютным путем (т.е. один общий файл с ключами), так и #
# динамически - в зависимости от пользователя (т.е. по     #
# файлу на каждого пользователя).                          #
# По умолчанию - “.ssh/authorized_keys”.                   #
# Пример для файла ключа в домашней папке пользователя:    # 
# AuthorizedKeysFile %h/.ssh/authorized_key                #
# Пример для общего файла:                                 #
# AuthorizedKeysFile /etc/ssh/authorized_keys              #
# См. описание файла authorized_keys для большей           #
# информации.                                              #
#                                                          #
## ChallengeResponseAuthentication #########################
#                                                          #
# Указывает, разрешить ли аутентификацию вида вопрос-ответ #
# (challenge-response authentication). Поддерживаются все  #
# виды аутентификации из login.conf По умолчанию - “yes”,  #
# т.е. разрешить.                                          #
# В Ubuntu - выключена по соображениям безопасности.       #
#                                                          #
ChallengeResponseAuthentication no
#                                                          #
## HostbasedUsesNameFromPacketOnly #########################
#                                                          #
# Указывает, как сервер должен получать имя хоста клиента  #
# при схеме аутентификации, основанной на проверке хоста.  #
# Если задать "yes" - при проверке соответствия в файлах   #
# ~/.shosts, ~/.rhosts или /etc/hosts.equiv sshd будет     #
# использовать имя хоста, предоставленное клиентом.        #
# (выполняя реверсивное DNS распознование) Если задать "no"#
# - sshd будет ресолвить имя из самого TCP соединения.     # 
# По умолчанию - "no".                                     #
#                                                          #
## IgnoreRhosts ############################################
#                                                          #
# Запрещает использование файлов .rhosts и .shosts         #
# в процессе аутентификации, основанной на проверке хоста. #
# (RhostsRSAAuthentication или HostbasedAuthentication).   #
# Файлы /etc/hosts.equiv и /etc/ssh/shosts.equiv все еще   #
# используются.                                            #
# По умолчанию - “yes”.                                    #
#                                                          #
IgnoreRhosts yes
#                                                          #
## IgnoreUserKnownHosts ####################################
#                                                          #
# Указывает должен ли sshd игнорировать пользовательские   # 
# "известные хосты" - файл ~/.ssh/known_hosts в процессе   #
# аутентификации, основанной на проверке хоста             # 
# (RhostsRSAAuthentication или HostbasedAuthentication).   #
# По умолчанию - “no”.                                     #
#                                                          #
## PermitBlacklistedKeys ###################################
#                                                          #
# Указывает, стоит ли sshd принимать ключи, занесенные в   #
# черный список как скомпрометированные (known-compromised #
# keys (см. ssh-vulnkey)). Если задано значение “yes” -    #
# попытки аутентификации с такими ключами будут занесены в #
# журнал и приняты, если значение “no” - попытки           #
# аутентификации будут отвергнуты.                         #
# По умолчанию - “no”.                                     #
#                                                          #
## PermitEmptyPasswords ####################################
#                                                          #
# В случае разрешенной аутентификации с помощью пароля,    #
# указывает, возможен ли вход с пустым паролем.            #
# По умолчанию - “no”.                                     #
#                                                          #
PermitEmptyPasswords no
#                                                          #
## PermitRootLogin #########################################
#                                                          #
# Указывает, возможен ли ssh-вход под суперпользователем   #
# (root). Может принимать значения:                        #
# “yes” - суперпользователь может зайти. Применяется       #
# текущая глобальная схема аутентификации.                 #
#                                                          #
# “without-password” - суперпользователь может зайти.      #
# Парольная аутентификация для него будет отключена.       #
#                                                          #
# “forced-commands-only” - суперпользователь сможет зайти, #
# пользуясь аутентификацией на основе публичного ключа и   #
# только если передаст необходимую к исполнению комнаду.   #
# Это удобно для осуществления резервного копирования,     #
# даже в том случае, когда нормальный (т.е. не через ssh)  #
# вход суперпользователя запрещен. Все остальные методы    #
# аутентификации для суперпользователя будут заблокированы.#
#                                                          #
# “no” - суперпользователь не может использовать ssh для   #
# входа в систему.                                         #
#                                                          #
# Значение по умолчанию - “yes”.                           #
#                                                          #
PermitRootLogin yes
#                                                          #
## Protocol ################################################
#                                                          #
# Указывает, какой протокол должен использовать sshd.      #
# Возможные значения ‘1’ и ‘2’ - ssh1 и ssh2               #
# соответственно. Возможна одновременная запись, при       #
# которой значения следует разделять запятыми.             #
# По умолчанию - “2,1”.                                    #
# Стоит отметить, что порядок следования протоколов в      #
# записи не задает приоритет, т.к. клиент выбирает какой   #
# из нескольких предложенных сервером протоколов ему       #
# использовать.Запись "2,1" абсолютно идентична            #
# записи "1,2".                                            #
#                                                          #
Protocol 2
#                                                          #
## UsePAM ##################################################
#                                                          #
# Включает интерфейс PAM (Pluggable Authentication Module  #
# interface).Если задано значение "yes" - для всех типов   #
# аутентификации помимо обработки модуля сессии и аккаунта #
# PAM будет использоваться аутентификация на основе        #
# запроса-ответа (ChallengeResponseAuthentication и        #
# PasswordAuthentication) Т.к. аутентификация              #
# запросов-ответов в PAM обычно выполняет ту же роль,      #
# что и парольная аутентификация, вам следует отключить    #
# либо PasswordAuthentication, либо                        #
# ChallengeResponseAuthentication. Стоит отметить, что     #
# если директива UsePAM включена - вы не сможете запустить #
# sshd от имени пользователя, отличного от root.           #
# Значение по умолчанию - “no”.                            #
#                                                          #
UsePAM yes
#                                                          #
## PasswordAuthentication ##################################
#                                                          #
# Указывает, разрешена ли аутентификация с использованием  #
# пароля.                                                  #
# По умолчанию - “yes”.                                    #
#                                                          #
## HostKey #################################################
#                                                          #
# Указывает файл, содержащий закрытый хост-ключ,           #
# используемый SSH. По умолчанию - /etc/ssh/ssh_host_key   #
# для протокола ssh1 и /etc/ssh/ssh_host_rsa_key и         #
# /etc/ssh/ssh_host_dsa_key для протокола ssh2. Стоит      #
# отметить, что sshd не станет пользоваться файлом,        #
# который доступен кому либо, кроме пользователя. Можно    #
# использовать несколько файлов с ключами, ключи “rsa1” -  #
# для протокола ssh1 и “dsa”/“rsa” для протокола ssh2.     #
#                                                          #
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
#                                                          #
############################################################
########## Опции протокола SSH версии 1 (ssh1) #############
############################################################
# Настоятельно НЕ РЕКОМЕНДУЕТСЯ использовать протокол ssh1.#
# Протокол ssh2 намного более безопасен, чем ssh1          #
############################################################
#                                                          # 
## KeyRegenerationInterval #################################
#                                                          #
# Для протокола ssh1 - раз в определенное время            #
# автоматически генерируется новый временный ключ сервера  #
# (если он был использован). Это сделано для               #
# предотвращения расшифровки перехваченных сеансов,с целью #
# позже зайти с параметрами этих сеансов на машину и       #
# украсть ключи. Такой ключ нигде не хранится (хранится в  #
# оперативной памяти). Данная директива указывает период   #
# "жизни" ключа в секундах, после которого он будет        #
# сгенерирован заново. Если значение задать равным 0 -     #
# ключ не будет генерироваться заново.                     #
# По умолчанию значение - 3600 (секунд).                   #
#                                                          #
KeyRegenerationInterval 3600
#                                                          #
## RhostsRSAAuthentication #################################
#                                                          #
# Указывает, нужна ли аутентификация на основе файлов      #
# rhosts или /etc/hosts.equiv совместно с успешной         #
# аутентификацией хоста через RSA.                         #
# Актуально только для протокола ssh1.                     #
# По умолчанию - “no”.                                     #
#                                                          #
RhostsRSAAuthentication no
#                                                          #
## RSAAuthentication #######################################
#                                                          #
# Указывает, разрешена ли "чистая" RSA-аутентификация.     #
# Актуально только для протокола ssh1.                     #
# По умолчанию - “yes”.                                    #
#                                                          #
RSAAuthentication yes
#                                                          #
## ServerKeyBits ###########################################
#                                                          #
# Определяет число бит во временном ключе сервера для      #
# протокола ssh1. Минимальное значение 512.                #
# Значение по умолчанию - 1024.                            #
ServerKeyBits 768
#                                                          #
############################################################
########### Опции протокола SSH версии 2 (ssh2) ############
############################################################
#                                                          #
## Ciphers #################################################
#                                                          #
# Указывает алгоритмы шифрования, разрешенные для          #
# протокола ssh2. Несколько алгоритмов должны быть         #
# разделены запятыми. Поддерживаемые алгоритмы:            #
# “3des-cbc”, “aes128-cbc”, “aes192-cbc”, “aes256-cbc”,    #
# “aes128-ctr”, “aes192-ctr”, “aes256-ctr”, “arcfour128”,  #
# “arcfour256”, “arcfour”, “blowfish-cbc”, “cast128-cbc”.  #
# По умолчанию используются:                               #
# aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128, #
# arcfour256,arcfour,aes192-cbc,aes256-cbc,aes128-ctr,     #
# aes192-ctr,aes256-ctr                                    #
#                                                          #
## HostbasedAuthentication #################################
#                                                          #
# Указывает, разрешена ли аутентификация, основанная на    #
# проверке хоста. Проверяется rhosts или /etc/hosts.equiv, #
# и в случае успеха, совместного с успешной проверкой      #
# публичного ключа, доступ разрешается. Данная директива   #
# одинакова с директивой RhostsRSAAuthentication и         #
# подходит только для протокола ssh2.                      #
# По умолчанию - "no".                                     #
#                                                          #
HostbasedAuthentication no
#                                                          #
## MACs ####################################################
#                                                          #
# Указывает допустимый алгоритм MAC (message               #
# authentication code). Алгоритм MAC используется          #
# протоколом ssh2 для защиты целостности данных. Несколько #
# алгоритмов должны быть разделены запятыми.               #
# По умолчанию используются:                               #
# hmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,   #
# hmac-sha1-96,hmac-md5-96                                 #
#                                                          #
## PubkeyAuthentication ####################################
#                                                          #
# Указывает, разрешена ли аутентификация на основе         #
# публичного ключа. Актуально только для протокола ssh2.   #
# По умолчанию - “yes”.                                    #
#                                                          #
PubkeyAuthentication yes
############################################################
#################### Опции GSSAPI ##########################
############################################################
#                                                          #
############ Применимо только для протокола ssh2 ###########
#                                                          #
## GSSAPIAuthentication ####################################
#                                                          #
# Указывает, разрешена ли аутентификация пользователя на   #
# основе GSSAPI. По умолчанию - "no", т.е. запрещена.      #
#                                                          #
## GSSAPIKeyExchange #######################################
#                                                          #
# Указывает, разрешен ли обмен ключами, основанный на      #
# GSSAPI. Обмен ключам при помощи GSSAPI не полагается на  #
# ssh ключи при верификации идентичности хоста.            #
# По умолчанию - "no" - т.е. обмен запрещен.               #
#                                                          #
## GSSAPICleanupCredentials ################################
#                                                          #
# Указывает, нужно ли автоматически уничтожать             #
# пользовательский кеш аутентификационных полномочий при   #
# завершении сеанса.                                       #
# По умолчанию - "yes" - т.е. нужно уничтожать.            #
#                                                          #
## GSSAPIStrictAcceptorCheck ###############################
#                                                          #
# Указывает, насколько строгой должна быть проверка        #
# идентичности клиента при аутентификации через GSSAPI.    #
# Значение "yes" заставляет клиента аутентифицироваться в  #
# принимающей хост-службе на текущем хосте. Значение "no"  #
# позволяет клиенту аутентифицироваться при помощи любого  #
# ключа служб.                                             #
# Значение по умолчанию - "yes".                           #
# Стоит заметить, что задание значения "no" может          #
# сработать только с редкими библиотеками Kerberos GSSAPI. #
#                                                          #
############################################################
################### Опции Kerberos #########################
############################################################
#                                                          #
## KerberosAuthentication ##################################
#                                                          #
# Указывает, требует ли пароль, предоставленный            #
# пользователем для аутентификации                         #
# (PasswordAuthentication) валидации в Kerberos KDC.       #
# Для использования этой опции серверу нужно               #
# удостовериться в истинности KDC. (Тhe server needs a     #
# Kerberos servtab which allows the verification of the    #
# KDC’s identity)                                          #
# По умолчанию - “no”.                                     #
#                                                          #
## KerberosGetAFSToken #####################################
#                                                          #
# Если активен AFS и пользователь получил Kerberos 5 TGT,  #
# пытаться ли получить AFS токен до того, как пользователь #
# получит доступ к своей домашней папке.                   #
# По умолчанию - “no”.                                     #
#                                                          #
## KerberosOrLocalPasswd ###################################
#                                                          #
# Указывает, как поступать в случае, если аутентификация   #
# через Kerberos завершилась неудачей. Если                #
# значение = "yes" - пароль будет проверен при помощи      #
# любого дополнительного локального механизма авторизации, #
# например - /etc/passwd.                                  #
# По умолчанию - “yes”.                                    #
#                                                          #
## KerberosTicketCleanup ###################################
#                                                          #
# Указывает, нужно ли автоматически уничтожать файл с      #
# кешем тикета пользователя по завершению сеанса.          #
# По умолчанию - “yes”.                                    #
#                                                          #
############################################################
################# Опции перенаправления ####################
############################################################
#                                                          #
## AllowAgentForwarding ####################################
#                                                          #
# Указывает, разрешить или запретить перенаправление       #
# ssh-agent'а. По умолчанию - “yes”, т.е. разрешить.       #
# Стоит заметить, что отключение перенаправления не        #
# увеличит безопасности пока пользователям также не будет  #
# запрещен shell доступ, т.к. они всегда смогут установить #
# свои собственные аналоги агента.                         #
#                                                          #
## AllowTcpForwarding ######################################
#                                                          #
# Указывает, разрешить или запретить перенаправление TCP.  #
# По умолчанию - “yes”, т.е. разрешить. Стоит заметить,    #
# что как и в случае с AllowAgentForwarding отключение     #
# перенаправления не увеличит безопасности, пока у         #
# пользователей будет консольный доступ, т.к. они смогут   #
# установить свои аналоги.                                 #
#                                                          #
#                                                          #
## GatewayPorts ############################################
#                                                          #
# Указывает, разрешать ли удаленным хостам доступ к        #
# перенаправленным портам. По умолчанию, sshd слушает      #
# соединения к перенаправленным портам только на локальном #
# интерфейсе (loopback). Это не дает другим удаленным      #
# хостам подсоединяться к перенаправленным портам. Можно   #
# использовать GatewayPorts, чтобы разрешить sshd это      #
# делать. Директива может принимать 3 значения:            #
# "no" - только loopback.                                  #
# "yes"- любые адреса.                                     #
# "clientspecified" - адреса указанные клиентом.           #
#                                                          #
## PermitOpen ##############################################
#                                                          #
# Указывает куда разрешено перенаправление TCP портов.     #
# Указание перенаправления должно принимать одну из        #
# следующих форм:                                          #
# PermitOpen host:port                                     #
# PermitOpen IPv4_addr:port                                #
# PermitOpen [IPv6_addr]:port                              #
# Несколько записей можно задать, разделяя их пробелами.   #
# Аргумент “any” можно использовать для снятия всех        #
# запретов на перенаправление портов. По умолчанию любое   #
# перенаправление разрешено.                               #
#                                                          #
## PermitTunnel ############################################
#                                                          #
# Указывает, разрешено ли перенаправление tun-устройств.   #
# Может принимать значения:                                #
# “yes”                                                    #
# “point-to-point” (3-й сетевой уровень)                   #
# “ethernet” (2-й сетевой уровень)                         #
# “no”                                                     #
# Значение “yes” разрешает одновременно и “point-to-point” #
# и “ethernet”. По умолчанию - “no”.                       #
#                                                          #
############################################################
################## Опции журналирования ####################
############################################################
#                                                          #
## SyslogFacility ##########################################
#                                                          #
# Задает код объекта журнала для записи сообщений в        #
# системный журнал от sshd. Возможные значения:            #
# DAEMON                                                   #
# USER                                                     #
# AUTH                                                     #
# LOCAL0                                                   #
# LOCAL1                                                   #  
# LOCAL2                                                   #
# LOCAL3                                                   #
# LOCAL4                                                   #
# LOCAL5                                                   #
# LOCAL6                                                   #
# LOCAL7                                                   #
# По умолчанию используется AUTH.                          #
#                                                          #
SyslogFacility AUTH
#                                                          #
## LogLevel ################################################
#                                                          #
# Задает уровень детальности журнала sshd.                 #
# Возможные варианты:                                      #
# SILENT                                                   #
# QUIET                                                    #
# FATAL                                                    #
# ERROR                                                    #
# INFO                                                     #
# VERBOSE                                                  #
# DEBUG                                                    #
# DEBUG1                                                   #
# DEBUG2                                                   #
# DEBUG3                                                   # 
# По умолчанию - INFO.                                     # 
# DEBUG и DEBUG1 эквивалентны друг другу.                  #
# DEBUG2 и DEBUG3 задают самые высокие уровни отладочного  #
# вывода. Запись логов с уровнем DEBUG угрожает            #
# приватности пользователей и не рекомендована.            #
#                                                          #
LogLevel INFO
#                                                          #
############################################################
################### Перенаправление X11 ####################
############################################################
#                                                          #
## X11Forwarding ###########################################
#                                                          #
# Указывает, разрешено ли перенаправление графической      #
# подсистемы X11. Может принимать значения “yes” или “no”. #
# По умолчанию - “no”.                                     # 
# Внимание - включение простого перенаправления Х11 -      #
# большой риск как для сервера, так и для клиентов, т.к. в #
# случае такого перенаправления прокси-дисплей sshd        #
# принимает соединения с любых адресов. Используйте        #
# директиву X11UseLocalhost для ограничения доступа к      #
# серверу перенаправления "иксов". Стоит отметить, что     #
# отключение перенаправления не даст гарантии, что         #
# пользователи не смогут перенаправлять Х11, т.к. имея     #
# консольный доступ они всегда установить свой             #
# перенаправлятель. Перенаправление Х11 будет              #
# автоматически отключено, если будет задействована        #
# директива UseLogin.                                      #
#                                                          #
X11Forwarding yes
#                                                          #
## X11UseLocalhost #########################################
#                                                          #
# Указывает, должен ли sshd ограничить область             #
# перенаправления Х11 локальным loopback адресом, или      #
# должен разрешить любые адреса. По умолчанию - sshd       #
# "сажает" сервер перенаправления Х11 на локальный адрес   #
# и задает часть переменной окружения DISPLAY, отвечающую  #
# за имя хоста как “localhost”. Стоит заметить, что        #
# некоторые старые клиенты Х11 могут не работать с такими  #
# настройками. По умолчанию - "yes", т.е. перенаправление  #
# ограничено локалхостом, значение - “no” - отключает      #
# ограничения.                                             #
#                                                          #
## XAuthLocation ###########################################
#                                                          #
# Указывает полный путь к программе xauth.                 #
# По умолчанию - /usr/bin/X11/xauth.                       #
#                                                          #
## X11DisplayOffset ########################################
#                                                          #
# Указывает номер первого дисплея, доступного sshd в       #
# качестве перенаправления X11. Это сделано для того,      #
# чтобы перенаправленные "иксы" не пересекались с          # 
# реальными. По умолчанию - 10.                            #
#                                                          #
X11DisplayOffset 10
#                                                          #
############################################################
################### Различные опции ########################
############################################################
#                                                          #
## LoginGraceTime ##########################################
#                                                          #
# Время, по прошествии которого сервер отключает           #
# пользователя, если тот не смог удовлетворительно         #
# залогиниться. Значение 0 - разрешает пользователю        #
# логиниться бесконечно. По умолчанию - 120 (секунд).      #
#                                                          #
LoginGraceTime 120
#                                                          #
## MaxAuthTries ############################################
#                                                          #
# Указывает максимальное число попыток аутентификации,     #
# разрешенное для одного соединения.                       #
# Как только число неудачных попыток превысит половину     #
# заданного значения, все последующие попытки будут        #
# заноситься в журнал. Значение по умолчанию - 6.          #
#                                                          #
## MaxSessions #############################################
#                                                          #
# Указывает максимальное число одновременных подключений   #
# для каждого сетевого соединения. По умолчанию - 10.      #
#                                                          #
## MaxStartups #############################################
#                                                          #
# Указывает максимальное число одновременных               #
# неавторизованных подключений к sshd. В случае, если      #
# число подключений превысит лимит - все дополнительные    #
# подключения будут сброшены до тех пор, пока текущие      #
# подключения не завершатся либо успешной авторизацией,    #
# либо истечением периода времени указанного в директиве   #
# LoginGraceTime. Значение по умолчанию - 10.              #
# Дополнительно, можно задать ранний сброс соединений,     #
# указав в качестве параметра три значения, разделенные    #
# двоеточием “start:rate:full” (например: "10:30:60").     #
# sshd отклонит попытку соединения с вероятностью равной   #
# “rate/100” (т.е. в нашем примере - 30%), если уже        #
# имеется “start” (10) неавторизованных соединений.        #
# Вероятность увеличивается линейно и любые попытки        #
# соединения будут отклонены, если число неавторизованных  #
# соединений достигнет значения “full” (60).               #
#                                                          #
## Compression #############################################
#                                                          #
# Указывает, разрешено ли сжатие данных. Может быть        #
# "yes" - сжатие разрешено.                                #
# "delayed" - сжатие отложено до тех пор, пока             #
# пользователь успешно не аутентифицируется.               #
# "no" - сжатие запрещено.                                 #
# По умолчанию - "delayed".                                #
#                                                          #
## UseLogin ################################################
#                                                          #
# Указывает, должен ли использоваться login для            #
# интерактивного сеанса. Значение по умолчанию - “no”.     #
# Стоит отметить, что login никогда не использовался для   #
# выполнения удаленных команд. Так же заметим, что         #
# использование login сделает невозможным использование    #
# директивы X11Forwarding, потому что login не знает, что  #
# ему делать с xauth. Если включена директива              #
# UsePrivilegeSeparation - она будет отключена после       #
# авторизации.                                             #
#                                                          #
## UsePrivilegeSeparation ##################################
#                                                          #
# Указывает, должен ли sshd разделять привилегии. Если да  #
# - то сначала будет создан непривилегированный дочерний   #
# процесс для входящего сетевого трафика. После успешной   #
# авторизации будет создан другой процесс с привилегиями   #
# вошедшего пользователя. Основная цель разделения         #
# привилегий - предотвращение превышения прав доступа.     #
# Значение по умолчанию - “yes”.                           #
#                                                          #
UsePrivilegeSeparation yes
#                                                          #
## StrictModes #############################################
#                                                          #
# Указывает должен ли sshd проверить режимы доступа и      #
# владения пользовательских папок и файлов перед тем, как  #
# дать пользователю войти. Обычно это объясняется тем, что #
# новички часто делают свои файлы доступными для записи    #
# всем подряд.По умолчанию - “yes”.                        #
#                                                          #
StrictModes yes
#                                                          #
## AcceptEnv ###############################################
#                                                          #
# Указывает, какие переменные окружения, переданные        #
# клиентом будут приняты. См. опцию SendEnv в клиенте.     #
# Стоит заметить, что передача переменных возможна только  #
# для протокола ssh2. Переменные указываются по имени,     #
# можно использовать маски (‘*’ и ‘?’). Можно указывать    #
# несколько переменных через пробел, или разбить на        #
# несколько строк AcceptEnv. Будьте осторожны - некоторые  #
# переменные окружения могут быть использованы для обхода  #
# запрещенных пользовательских окружений. Пользуйтесь этой #
# директивой аккуратно. По умолчанию никакие               #
# пользовательские переменные окружения не принимаются.    #
#                                                          #
AcceptEnv LANG LC_*
#                                                          #
## PermitUserEnvironment ###################################
#                                                          #
# Указывает, должен ли sshd воспринимать                   #
# ~/.ssh/environment и опцию environment= в                #
# ~/.ssh/authorized_keys. По умолчанию - “no”. Стоит       #
# заметить, что разрешение обработки окружения может дать  #
# пользователям возможность обойти ограничения в некоторых #
# конфигурациях, использующих такие механизмы, как         #
# LD_PRELOAD.                                              #
#                                                          #
#                                                          #
## PidFile #################################################
#                                                          #
# Указывает файл, содержащий идентификатор процесса        #
# (process ID, PID) демона SSH.                            #
# По умолчанию - /var/run/sshd.pid                         #
#                                                          #
#                                                          #
## PrintLastLog ############################################
#                                                          #
# Указывает, должен ли sshd выводить на экран дату и время #
# последнего севнса при интерактивном входе пользователя.  #
# По умолчанию - “yes”.                                    #
#                                                          #
PrintLastLog yes
#                                                          #
## PrintMotd ###############################################
#                                                          #
# Указывает, должен ли sshd выводить на экран /etc/motd    #
# при интерактивном входе пользователя. На некоторых       #
# системах (например в Ubuntu) эта информация так же       #
# выводится на экран оболочкой.                            #
# Значение по умолчанию - “yes”.                           #
#                                                          #
PrintMotd no
#                                                          #
## Banner ##################################################
#                                                          #
# Указывает какой файл содержит текстовый баннер, который  #
# будет показан пользователю ПЕРЕД процедурой              #
# аутентификации. Опция доступна только для протокола ssh2.#
# По умолчанию - не показывает ничего.                     #
# В Ubuntu файл issue.net содержит фразу Ubuntu {version}, #
# например, для karmic это "Ubuntu 9.10". Можно            #
# использовать для дезориентации возможных атакующих,      #
# написав туда например "My D-Link Interet Router" =)      #
#                                                          #
Banner /etc/issue.net
#                                                          #
## ChrootDirectory #########################################
#                                                          #
# Если указан - предоставляет путь, по которому будет      #
# выполнен chroot после аутентификации. Путь и все его     #
# содержимое должны соответствовать принадлежащим          #
# суперпользователю папкам и быть не доступными для        #
# записи другими пользователями.                           #
# В пути могут быть указаны метки, подставляемые в         #
# процессе аутентификации:                                 #
# %% - заменяется литералом '%'                            #
# %h - заменяется домашней директорией                     #
# аутентифицируещегося пользователя                        #
# %u - заменяется именем аутентифицируещегося пользователя #
# chroot-папка должна содержать все необходимые файлы и    #
# папки для пользовательского сеанса. Для интерактивного   #
# сеанса нужны как минимум:                                #
# оболочка, обычно - sh                                    #
# базовые устройства в /dev, такие как:                    #
# null, zero, stdin, stdout, stderr, arandom и tty         #
# для сеанса передачи данных при помощи sftp никаких       #
# дополнительных настроек не нужно, если используется      #
# внутренний процесс sftp сервера. См. Subsystem для       #
# большей информации. По умолчанию chroot не выполняется.  #
#                                                          #
## ForceCommand ############################################
#                                                          #
# Заставляет выполняться указанную команду. Игнорирует     #
# любые команды переданные клиентом или записанные в       #
# ~/.ssh/rc. Команда вызывается из пользовательской        #
# оболочки с опцией -с. Подходит для запуска оболочки,     #
# команды или подсистемы. Наиболее полезна внутри блока    #
# Match. Команда, изначально переданная клиентом, хранится #
# в переменной окружения SSH_ORIGINAL_COMMAND. Если        #
# указать команду "internal-sftp", будет запущен           #
# внутренний sftp сервер, которому не нужны дополнительные #
# файлы и папки, описанные в директиве ChrootDirectory.    #
#                                                          #
## Subsystem ###############################################
#                                                          #
# Определяет и настраивает внешнюю подсистему (например    #
# демона передачи файлов - file transfer daemon).          #
# Аргументами служат имя и команда (с возможными           #
# аргументами), которая будет выполнена во время запроса   #
# на подсистемы. Команда sftp-server  запускает “sftp” -   #
# подсистему передачи файлов. Дополнительно можно указать  #
# в качестве подсистемы “internal-sftp” - что запустит     #
# внутренний sftp сервер. Это может значительно упростить  #
# настройку в случае использования директивы               #
# ChrootDirectory По умолчанию никаких подсистем           #
# не вызывается. Актуально только для протокола ssh2.      #
#                                                          #
Subsystem sftp /usr/lib/openssh/sftp-server
#                                                          #
############################################################
##################### Блок Match ###########################
############################################################
#                                                          #
# Специально вынес в конец файла, чтобы было удобнее       #
# писать Match правила.                                    #
#                                                  MadKox. #
#                                                          #
# Директива Match представляет собой начало условного      #
# блока. Если выполнены все критерии, указанные в строке   #
# Match, директивы в последующих строках блока выполняются,#
# позволяя обойти значения глобальных директив файла       #
# sshd_config для случая, являющегося критерием директивы  #
# Match. Блоком считаются все строки, идущие после строки  #
# с критерием (Match - строки) до следующей match-строки   #
# или до конца файла. Аргумент директивы Match - одна или  #
# несколько пар записей критериев. Возможные виды записей: #
# User                                                     #
# Group                                                    #
# Host                                                     #
# Address                                                  #
# Записи могут содержать как одиночные значения            #
# (например User=user), так и несколько значений,          #
# разделенные запятыми (User=user1,user2). Так же могут    #
# быть использованы регулярные выражения, описанные в      #
# секции PATTERNS файла ssh_config. Записи в критерии      #
# Address могут содержать адреса в нотации CIDR            #
# (Адрес/Длинна маски, например “192.0.2.0/24” или         #
# “3ffe:ffff::/32”). Стоит заметить, что представленная    #
# длинна маски должна соответствовать адресу, и слишком    #
# длинные/короткие для адреса не будут работать.           #
# В качестве директив Match может использовать только      #
# определенный набор директив:                             #
# AllowTcpForwarding                                       #
# Banner                                                   #
# ChrootDirectory                                          #
# ForceCommand                                             #
# GatewayPorts                                             #
# GSSAPIAuthentication                                     #
# HostbasedAuthentication                                  #
# KbdInteractiveAuthentication                             #
# KerberosAuthentication                                   #
# MaxAuthTries                                             # 
# MaxSessions                                              #
# PasswordAuthentication                                   #
# PermitOpen                                               #
# PermitRootLogin                                          #
# RhostsRSAAuthentication                                  #
# RSAAuthentication                                        #
# X11DisplayOffset                                         #
# X11Forwarding                                            #
# X11UseLocalHost                                          #

Можно скопировать приведенный выше текст в ваш собственный sshd_config и использовать в дальнейшем для настройки.

Рекомендуемые параметры. Безопасность

Сам по себе, неправильно настроенный SSH-сервер — огромная уязвимость в безопасности системы, т. к. у возможного злоумышленника есть возможность получить практически неограниченный доступ к системе. Помимо этого, у sshd есть много дополнительных полезных опций, которые желательно включить для повышения удобства работы и безопасности3).

Port, ListenAddress и AddressFamily

Эти три параметра определяют, на каких портах и адресах ваш сервер будет ждать входящие соединения. Во-первых, имеет смысл по возможности ограничить семейство обрабатываемых адресов реально используемыми, т. е. если вы используете только IPv4 — отключите IРv6, и наоборот. Сделать это можно при помощи параметра AddressFamily, например (для разрешения IPv4 и запрета IPv6):

AddressFamily inet

Во-вторых, желательно сменить стандартный порт (22) на котором слушает sshd. Это связано с тем, что многочисленные сетевые сканеры постоянно пытаются соединиться с 22-м портом и как минимум получить доступ путем перебора логинов/паролей из своей базы. Даже если у вас и отключена парольная аутентификация — эти попытки сильно засоряют журналы и (в большом количестве) могут негативно повлиять на скорость работы ssh сервера. Если же вы по какой либо причине не желаете изменить стандартный порт вы можете использовать как различные внешние утилиты для борьбы брутфорсерами, например fail2ban, так и встроенные, такие как MaxStartups.

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

Port 2002

или

ListenAddress 192.168.0.1:2003
ListenAddress 192.168.1.1:2004

Запрещение удаленного доступа для суперпользователя

По умолчанию root-доступ запрещен по паролю (по ключу — можно) — опция PermitRootLogin установлена в without-password4). Но, при условии, что по умолчанию в Ubuntu пользователь, добавленный при установке системы имеет возможность решать все административные задачи через sudo, создавать возможность root доступа к системе через ssh — выглядит неразумно (даже при аутентификации по ключу). Рекомендуется совсем отключить. эту опцию, или применять ее только в режиме forced-commands-only. Отключить root-доступ можно так:

PermitRootLogin no

Парольная аутентификация

Разрешенная по умолчанию парольная аутентификация является практически самым примитивным способом авторизации в sshd. С одной стороны это упрощает конфигурацию и подключение новых пользователей (пользователю достаточно знать свой системный логин/пароль), с другой стороны пароль всегда можно подобрать, а пользователи часто пренебрегают созданием сложных и длинных паролей. Специальные боты постоянно сканируют доступные из интернета ssh сервера и пытаются авторизоваться на них путем перебора логинов/паролей из своей базы. Настоятельно не рекомендуется использовать парольную аутентификацию. Отключить ее можно так:

PasswordAuthentication no

Если по каким либо причинам вам все таки хочется использовать парольную аутентификацию — позаботьтесь о том, чтобы никто не мог авторизоваться с пустым паролем. Для этого задайте директиву PermitEmptyPasswords:

PermitEmptyPasswords no

Протоколы SSH1 и SSH2

Как уже было сказано, sshd может работать с протоколами SSH1 и SSH2. При этом использование небезопасного SSH1 крайне не рекомендуется. Заставить sshd работать только с протоколом SSH2 можно так:

Protocol 2

Аутентификация на основе SSH2 RSA-ключей

Наиболее предпочтительным способом авторизации является аутентификация на основе SSH2 RSA-ключей. При таком способе пользователь генерирует на своей стороне пару ключей, из которой один ключ является секретным, а другой публичным. Публичный ключ копируется на сервер и служит для проверки идентичности пользователя. Более подробно про создание пары ключей и способы размещения их на сервере см. в описании SSH-клиента.
Включить аутентификацию по публичному ключу можно так:

PubkeyAuthentication yes

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

# Коментарии записываются только с новой строки
# общий вид записей в файле authorized_keys
# [опции] тип_ключа(ssh-rsa или ssh-dss) очень_длинная_строка_непонятная_простому_человеку [логин@хост]
ssh-rsa AAAAB3Nza...LiPk== user@example.net
from="*.sales.example.net,!pc.sales.example.net" ssh-rsa AAAAB2...19Q== john@example.net
command="dump /home",no-pty,no-port-forwarding ssh-dss AAAAC3...51R== example.net
permitopen="192.0.2.1:80",permitopen="192.0.2.2:25" ssh-dss AAAAB5...21S==
tunnel="0",command="sh /etc/netstart tun0" ssh-rsa AAAA...== jane@example.net

Можно указать как один общий файл с ключами, так и по файлу на каждого пользователя. Последний способ является более удобным и безопасным, т. к. можно во-первых указывать разные комбинации ключей для каждого пользователя5), а во-вторых ограничить доступ к публичному ключу пользователя. Задать файл с ключами можно при помощи директивы AuthorizedKeysFile:

AuthorizedKeysFile %h/.ssh/my_keys

для схемы пользователь — файл

или

AuthorizedKeysFile /etc/ssh/authorized_keys

для схемы с общим файлом. По умолчанию SSH-клиент ищет ключи в файле ~/.ssh/authorized_keys .

Еще про безопасность

Дополнительные настройки

Пользователи и группы.

Если у вас на сервере «живет» много пользователей, а доступ через ssh вы хотите разрешить только нескольким из них — вы можете использовать директивы DenyUsers, AllowUsers, DenyGroups, и AllowGroups. Более подробно про эти директивы см. комментарии в примере sshd_config.

Опции определения состояния соединения

По умолчанию из способов определения состояния соединения включен только способ проверки TCP соединения — TCPKeepAlive, однако, sshd умеет определять состояния соединения и более удобными и безопасными способами. Подробнее см. соответствующий раздел в примере sshd_config.

Производительность. MaxStartups

FIXME

Перенаправление портов

FIXME

Перенаправление X11

На сервере в файле /etc/ssh/sshd_config выставить параметр (по умолчанию включено):

ForwardX11 yes

На клиенте в файле /etc/ssh/ssh_config выставить параметры (по умолчанию выключено):

ForwardAgent yes
ForwardX11 yes

Запускать на клиенте можно так ssh yurauname@serverip firefox . Или сначала заходим ssh yurauname@serverip потом запускаем, например sudo synaptic .

SFTP

В sshd по умолчанию встроен SFTP-сервер. Протокол SFTP (SSH File Transfer Protocol) — SSH-протокол для передачи файлов. Он предназначен для копирования и выполнения других операций с файлами поверх надёжного и безопасного соединения. Как правило, в качестве базового протокола, обеспечивающего соединение, и используется протокол SSH2.
Для того чтобы включить поддержку SFTP добавьте в sshd_config строку

Subsystem sftp /usr/lib/openssh/sftp-server

По умолчанию поддержка SFTP включена.

Использование критериев. Директива Match

FIXME

Настройка SSH-клиента

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

ssh-keygen -t rsa

Получаем предложение ввести пароль для защиты файла ключа (оказывается полезным при попадании файла в чужие руки). Если мы собираемся по SSH выполнять скрипты, то оставляем пустым.
Передаём публичный ключ на сервер командой

ssh-copy-id -i ~/.ssh/id_rsa.pub user@server

Всё, можно заходить.

Когда ssh работает на нестандартном порту:

ssh-copy-id -i ~/.ssh/id_rsa.pub "-p port user@server"

Если возникает ошибка:

Bad port 'umask 077; test -d .ssh || mkdir .ssh ; cat >> .ssh/authorized_keys'

попробуйте взять параметры в кавычки:

ssh-copy-id '-i /home/user/.ssh/id_rsa.pub "-p port user@server"'

Удобно при подключени на удалённой системе пользоваться утилитой screen.

Настройка удаленной ssh-директории в Nautilus

Монтирование удаленной директории с помощью sshfs

Монтирование удаленного каталога в локальный каталог

sshfs user@hostingserver.ru:/home/userdir ~/sshfsdir

Размонтирование

fusermount -u ~/sshsfdir

SSH aliases

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

Настройки хранятся в ~/.ssh/config для одного пользователя и в /etc/ssh/ssh_config глобально для всех пользователей.

Пример конфига. Описано может быть множество серверов. Подробнее в man ssh_config (не путать с sshd_config)

Host AliasName # Произвольное имя хоста
HostName 1.2.3.4 # Можно указывать как IP, так и hostname (если работает DNS)
User YourUserName # Если пользователь не совпадает с локальным пользователем
Port YourSSHPort # Если нестандартный порт

После этого можно подключаться к серверу командой

ssh AliasName

ssh-agent

FIXME

Диагностика проблем подключения

  • Анализ лога подключения:

ssh -vvv user@host
  • Анализ конфигурационных файлов клиента и сервера.

Расположение конфигурационных файлов можно узнать из

man ssh
man sshd

Использование смарт-карт

1. Создание сертификата и экспорт открытого ключа, а также клиентская часть на Windows + Putty SC описано на сайте:
http://habrahabr.ru/post/88540/
Описанное там дополнение Key Manager доступно только в старых версиях Firefox. Проверено на версии 3.5 для Windows.
Прямая ссылка на дополнение: https://addons.mozilla.org/ru/firefox/addon/key-manager/

2. Подготовка сервера. Вам необходимо убедиться что в конфигурации sshd разрешена аутентификация при помощи публичных ключей. Для этого необходимо в файле «sshd_config» указать значение параметра «PubkeyAuthentication» в «yes».
Затем в файл «~/.ssh/authorized_keys» добавляем наш публичный ключ полученный ранее (одной строкой). Обратите внимание, файл «.ssh/authorized_keys» находится в домашнем каталоге того пользователя, который потом будет логиниться по публичному ключу.

3. Клиентская часть на Linux. Потребуется пересборка пакета OpenSSH без параметров. Рекомендуется только указать префиксы каталогов, например –prefix=/usr. Также следует учесть, что файлы конфигов будут в /usr/etc.
Перед началом необходимы пакеты: opensc-lite-devel, zlib-devel, openssl-devel.
Устанавливаем драйвер смарт-карты.
Для удобства в конфиге ssh_config (не путать с sshd_config) указать путь к библиотеке pkcs:
PKCS11Provider=<путь к библиотеке>

4. На клиенте запускаем
ssh user@host
Если смарт-карта (токен) подключена, будет запрошен пароль и выполнен вход в сессию SSH.

Возможные проблемы при использовании

Привычная комбинация клавиш Ctrl+S, используемая во многих редакторах для сохранения исправлений, при работе в терминале с ssh-cервером приведёт к выполнению команды XOFF что внешне напоминает зависание сессии. Однако это не так. Сервер продолжает принимать вводимые символы и команды, но не выводит это на экран. Что бы выйти из такого затруднительного положения достаточно применить комбинацию Ctrl+Q, тем самым включив режим XON обратно.

Ссылки

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

  • Нужно дописать статью, перевести с man’ов и описать нужные файлы

MadKox

Понравилась статья? Поделить с друзьями:
  • Омега 369 турция инструкция по применению
  • Инструкция по охране труда для заточника 2022 по новым правилам
  • Вимеспиро инструкция по применению в ветеринарии цена
  • Инструкция к бортовому компьютеру мультитроникс х150
  • Руководство по ремонту митсубиси динго