Windows. Вирусы. Ноутбуки. Интернет. Office. Утилиты. Драйверы

SSH – один из важнейших инструментов системного администрирования.

SSH, или Secure Shell (безопасная оболочка) – это протокол, который используется для безопасного подключения к удаленным системам. Это самый распространенный способ подключения к удаленным Linux- и Unix-подобным серверам (например, к VPS).

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

Базовый синтаксис

Для подключения к удаленной системе с помощью SSH в Linux существует одноименный инструмент – ssh.

Базовый вид команды:

ssh удаленный_хост

В данном примере фраза «удаленный_хост» заменяет IP-адрес или доменное имя хоста, к которому нужно подключиться.

Эта команда предполагает, что имя пользователя на удаленной и локальной системах совпадают.

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

ssh имя_пользователя@удаленный_хост

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

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

Чтобы вернуться в локальную сессию, просто наберите:

Как работает SSH?

SSH работает путем подключения клиентской программы к серверу ssh.

В приведенных выше командах ssh является клиентской программой. Сервер ssh уже запущен на указанном удаленном хосте.

Если сервер ssh еще не запущен на VPS, нажмите кнопку «Console Access», которая находится на странице сервера. Это выведет экран авторизации. Для входа используйте свои учетные данные.

В целом, процесс запуска сервера ssh зависит от используемого дистрибутива Linux.

В Ubuntu для запуска сервера ssh на VPS нужно ввести:

Sudo service sshd start

Настройка SSH

При изменении настроек SSH изменяются и настройки ssh-сервера.

В Ubuntu главный конфигурационный файл SSH находится в /etc/ssh/sshd_config.

Создайте резервную копию текущей версии этого файла перед его редактированием:

Sudo cp /etc/ssh/sshd_config{,.bak}

Откройте его с помощью текстового редактора:

Sudo nano /etc/ssh/sshd_config

Некоторые настройки требуют особенного внимания, например:

Данная строка определяет, какой порт ssh-сервер будет прослушивать для соединений. По умолчанию это порт 22.

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

HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key

Строки HostKey указывают, где находятся ключи хоста (подробнее о ключах хоста позже).

SyslogFacility
LogLevel INFO

Данные строки содержат настройки журналирования и определяют уровень журнала.

При возникновении каких-либо проблем с SSH рекомендуется повысить уровень журнала (что увеличивает количество записываемых данных).

LoginGraceTime 120
PermitRootLogin yes
StrictModes yes

Данные параметры содержат некоторую регистрационную информацию.

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

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

PermitRootLogin определяет возможность входа в систему как пользователь root.

В большинстве случаев после создания пользователя, имеющего повышенные привилегии (su или sudo) и возможность подключаться через ssh, в данной строке рекомендуется установить «no»

strictModes – это защитное устройство, которое откажет во входе, если файлы аутентификации доступны для чтения всем.

Это предотвращает попытки входа, если файлы конфигурации не защищены.

X11Forwarding yes
X11DisplayOffset 10

Данные параметры настраивают функцию под названием X11 Forwarding, что позволяет просматривать графический пользовательский интерфейс (GUI) удаленной системы на локальной системе.

Этот параметр должен быть активирован и на локальной, и на удаленной машине; для использования функции необходимо передать клиента и опцию –X.

Отредактировав данный файл, не забудьте перезапустить ssh-сервер, чтобы активировать внесенные изменения:

sudo service sshd restart

Кроме того, внесенные изменения необходимо тщательно протестировать, чтобы убедиться, что все работает должным образом.

Столкнувшись с проблемами, помните, что войти можно также с помощью кнопки «Console Access».

Вход с помощью ключей SSH

Зачастую аутентификация на основе ключей намного надежнее, чем вход в удаленную систему при помощи пароля.

Как работает аутентификация на основе ключей?

Аутентификация на основе ключей подразумевает создание пары ключей – закрытого и открытого.

Закрытый ключ находится на клиентской машине, должен быть защищен и храниться в секрете.

Открытый ключ можно давать кому угодно и разместить на любом сервере, к которому нужно получить доступ.

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

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

После настройки ключей весь этот процесс осуществляется автоматически в фоновом режиме.

Создание SSH-ключей

SSH-ключи нужно создать на компьютере, с которого нужно установить подключение (как правило, это локальный компьютер).

В командной строке наберите:

ssh-keygen -t rsa

Чтобы принять настройки по умолчанию, нажмите Enter. Ключи будут созданы в ~/.ssh/id_rsa.pub и ~/.ssh/id_rsa.

Перейдите в каталог.ssh, набрав:

Обратите внимание на права на файлы:

ls -l
-rw-r--r-- 1 demo demo 807 Sep 9 22:15 authorized_keys
-rw------- 1 demo demo 1679 Sep 9 23:13 id_rsa
-rw-r--r-- 1 demo demo 396 Sep 9 23:13 id_rsa.pub

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

В то же время, файл id_rsa.pub можно использовать совместно, потому он имеет соответствующие привилегии.

Передача открытого ключа на сервер

Следующая команда скопирует открытый ключ на удаленный сервер:

ssh-copy-id удаленный_хост

Это откроет сессию SSH, для входа в которую нужно ввести пароль.

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

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

При подключении по SSH можно использовать ряд флагов.

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

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

ssh -p номер_порта удаленный_хост

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

ssh удаленный_хост нужная_команда

Эта строка установит соединение с удаленной машиной и выполнит указанную команду.

Как уже было сказано, если функция X11 forwarding активирована на обоих компьютерах, ее можно использовать, набрав:

ssh -X удаленный_хост

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

Итоги

Научиться работать с SSH очень важно хотя бы потому, что это необходимо для выполнения самых базовых задач.

Постоянно используя SSH, можно не только защитить сервер, но и стать продвинутым пользователем, что значительно упростит жизнь. Протокол SSH остается популярным, потому что он безопасен, надежен и полезен в различных ситуациях.

Tags: ,

Установка будет выполнятся из стандартных репозиториев Ubuntu, поэтому потребуется настроенное подключение к сети интернет.

В Ubuntu Server 12.04 используется OpenSSH Server, который и будет установлен. Выполните следующую команду:

sudo apt-get install openssh-server

Установка не займет много времени, возможно несколько минут, в зависимости от скорости подключения к сети интернет. После того, как установка будет завершена можно сразу запустить службу sshd и начать пользоваться ssh сервером, т.к. все настройки OpenSSH, которые устанавливаются при его инсталляции имеют высокую степень безопасности. Для запуска сервера OpenSSH выполните:

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

Повышение безопасности ssh сервера

Прежде чем приступить к внесению изменений в файл конфигурации /etc/ssh/sshd_config необходимо сделать его копию на всякий случай. Например, можно скопировать файл в свою домашнюю папку:

sudo cp /etc/ssh/sshd_config ~

Теперь можно приступить к настройке сервера ssh. Откройте файл /etc/ssh/sshd_config в текстовом редакторе, например, vi:

sudo vi /etc/ssh/sshd_config

Смена порта ssh-сервера

Стандартный TCP/IP порт, который использует ssh-сервер - 22. Зная это многие автоматические программы взлома сканируют сеть, определяя открытые 22 порты и пытаются соеденится по протоколу ssh и подобрать пароль. В том случае, если имя пользователя и пароль просты (что, конечно же, недопустимо) вы подвергаетесь риску, что они будут подобраны и злоумышленник попадет в вашу систему. Смена порта на любой другой в большинстве случаев позволит спрятать ваш ssh-сервер от автоматических систем взлома. Для смены порта найдите в файле конфигурации строчку "Port 22" и измените значение порта, например:

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

Запрещение входа пользователя root по ssh

Запрет входа пользователя root через ssh также несколько улучшит безопасность, ведь если атакующему удастся подобрать пароль и зайти в вашу систему под root"ом, то он сразу получает полный контроль над системой. Для выполнения этой настройки найдите параметр "PermitRootLogin" и смените его значение с "yes" на "no":

Разрешение входа по ssh только определенным пользователям

Другой способ повышения безопасности - ограничить количество пользователей, которым разрешен вход по ssh. Это можно сделать с помощью директивы "AllowUsers". Когда она присутствует в файле конфигурации вход разрешен только тем пользователям, которые описаны в ней. Например, вы хотите разрешить выполнение входа через ssh только пользователю "howtoit", для этого допишите в конец файла /etc/ssh/sshd_config строчку:

Если вы хотите внести в список нескольких пользователей, просто добавьте их через пробел, например так:

AllowUsers howtoitru someuser

После окончании настройки сохраните и закройте файл конфигурации и перезапустите сервер ssh:

Теперь вы сможете подключится к вашей системе Ubuntu Server 12.04 c другой машины, используя ssh-клиент.

И Vino . Общий принцип работы: с компьютера под Windows создается защищенный SSH-туннель до Ubuntu и через него создается VNC-подключение (удаленный рабочий стол).

Статья делится на четыре части:

  • Установка и активация SecureShellServer: sudo apt-get install openssh-server service ssh status ssh start/running, process 2006

    Проверка открытости 22 порта (порт, используемый по умолчанию SSH):

    Netstat -tulpan | grep:22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -

    В Linux ля подключения по SSH с использованием локального проброса портов (local port forwarding) используется в общем виде следующая команда

    Ssh -C -p -L <локальный_порт>:<адрес_машины>:<удаленный_порт> -l <пользователь>

    Это означает, что любое соединение, исходящее из локального компьютера (localhost) через порт <локальный_порт> будет перенаправлено по SSH-тунелю на <удаленный_порт> удаленной машины.

    Существует некоторая путаница относительно какие же IP указывать в и <адрес_машины>. Если компьютер находится за роутером (NAT’ом) то <адрес_машины> должен быть внутренним ip-адресом компьютера (например, 10.0.0.5), а в внешним ip-адресом роутера. Если компьютер подключается к Интернету напрямую, то адреса и <адрес_машины> будут одинаковыми.

    Подводя итог про туннелирование рассмотрим пример:

    Ssh -l myuserid -L 7777:work:22 gate ssh -p 7777 localhost

    Данная комманда делает следующее: создается защищенное ssh-подключение к машине gate под пользователем myuserid. Одновременно с этим начинается прослушивание на локальной (с которой осуществлялось подключение) машине на порту 7777. Если организуется подключение на этот порт (опять изнутри самой локальной машины), то это соединение туннелируется в ssh-соедиенние, доходит до машины gate и с нее осуществляется соединение на машину work на 22 порт. После этого мы проверяем работу туннеля — подключаясь по ssh на локальный порт 7777 мы в итоге подключаемся к машине work (при учете что на ней настроен ssh сервер на порту 22).

    Усиленная защита при использовании SSH-туннеля достигается за счет того, что только один порт должен быть открыт наружу (SSH) и зашифрованное подключение будет идти только через этот порт.
    На сервере проверяем присутствует ли папка

    /home/<имя_пользователся>/.ssh

    /home/<имя_пользователся>/.ssh/authorized_keys

    в ней, если нет, то создаем под пользователем <имя_пользователся>(как правило, это первый пользователь в системе или администратор)

    Mkdir ~/.ssh cd ~/.ssh touch authorized_keys

    Настраиваем ssh для большей безопасности. Файл настроек лежит по адресу

    /etc/ssh/sshd_config

    Делаем резервную копию

    Sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original

    В общем случае следует изменить:

    • TCP-порт прослушивания (по умолчанию 22):
      Port <Порт_на_котором_SSH_будет_ждать_подключения>
    • Отключить ненадежный старый протокол SSH ver.1:
      Protocol 2
    • Разрешить аутентификацию парой открытого/закрытого ключей:
      PubkeyAuthentication yes
    • Указывать, где смотреть на разрешенные публичные ключи:
      AuthorizedKeysFile %h/.ssh/authorized_keys
    • Отключить возможность аутентификации с помощью пароля (можно сделать и позже, после удачного первого соединения):
      PasswordAuthentication no

    Для большей безопасности следует настроить на аутентификацию SSH с помощью открытого ключа.
    Разрешенные к подключению по ssh публичные ключи хранятся в файле

    ~/.ssh/authorized_keys

    Генерируем пару открытый/закрытый ключей на машине, с которой будем подключаться (будет описано далее) и копируем открытый ключ в этот файл.

    Особое внимание нужно обратить на форматирование – весь ключ должен быть размещен в одну строку и начинаться с «ssh-rsa » и доступ к файлу (-rw——- (600)).

    Настраиваем правильный доступ к файлу с ключами

    Chmod go-w $HOME $HOME/.ssh chmod 600 $HOME/.ssh/authorized_key chown `whoami` $HOME/.ssh/authorized_keys

    В файле настроек /etc/ssh/sshd_config изменяем

    StrictModes no

    Для применения настроек, внесенных в файл /etc/ssh/sshd_config , необходимо перезапустить демон sshd.

    Sudo /etc/init.d/ssh restart

  • Скачиваем putty.exe.
    Перед тем как погрузиться в настройки Putty необходимо сделать несколько замечаний.
    • Putty сохраняет настройки в профили.
    • Для сохранения всех настроек в профиль нужно перейти в меню Session в графе Saved Session ввести имя профиля и нажать Save. Для того чтобы загрузить определенный профиль в Putty в том же меню нужно выбрать нужный профиль по имени и нажать Load.
    • Для автоматической загрузки определенного профиля при запуске Putty нужно создать ярлык на exe-файл и в строке Рабочая папка дописать после пути к exe файлу добавить
      -load <имя_профиля>

    Для улучшения безопасности будет использоваться:

    • локальный проброс портов
    • система с открытым ключом

    В случае использования SSH-подключения для доступа по VNC (удаленному рабочему столу) необходимо настроить проброс портов, так называемый local port forwarding . Он используется для повышения безопасности, так как при использовании VNC данные передаются в открытом виде.

    Для проброса портов в Putty переходим в меню Connection -> SSH -> Tunnels и добавляем 5900 как "Source port", localhost:5900 в "Destination" и нажимаем Add.

    Для создания пары открытого/закрытого ключей можно использовать программу Puttygen. Скачиваем Puttygen.exe . В параметрах выбираем SSH-2 RSA, количество битов устанавливаем 2048 и нажимаем кнопку Generate.

    Для дополнительной защиты можно дважды прописать "passphrase". Если есть необходимость при SSH-соединении сразу входить в консоль, то поле можно оставить пустым.

    Открытый ключ сохраняется в понятном только Putty форматировании. Поэтому для установки его в Linux нужно сделать следующее:

    1. Пока puttygen еще открыта – скопировать публичный ключ в разделе "Public key for pasting…" И вставить в файл authorized_keys на сервере.
    2. Указать Putty на файл закрытого ключа в меню Connection -> SSH -> Auth в разделе "Private key file for authentication" сгенерированный файл*.ppk.
  • По умолчанию в Ubuntu уже включен VNC-сервер Vino. Для его настройки нужно перейти в Menu -> System -> Preferences -> Remote Desktop и включить удаленный доступ. В настройках можно включить аутентификацию по паролю, но нельзя настроить порт прослушивания (используется 5900).
    Для возможности более детальной настройки рекомендуется установить X11VNC.
  • Скачиваем TightVNC и устанавливаем. Для целей данной статьи достаточно выбрать только роль клиента.

    Запускаем на Windows машине TightVNC и в поле вбиваем

    Localhost:5900

This section of the Ubuntu Server Guide introduces a powerful collection of tools for the remote control of, and transfer of data between, networked computers called OpenSSH . You will also learn about some of the configuration settings possible with the OpenSSH server application and how to change them on your Ubuntu system.

OpenSSH is a freely available version of the Secure Shell (SSH) protocol family of tools for remotely controlling, or transferring files between, computers. Traditional tools used to accomplish these functions, such as telnet or rcp , are insecure and transmit the user"s password in cleartext when used. OpenSSH provides a server daemon and client tools to facilitate secure, encrypted remote control and file transfer operations, effectively replacing the legacy tools.

The OpenSSH server component, sshd , listens continuously for client connections from any of the client tools. When a connection request occurs, sshd sets up the correct connection depending on the type of client tool connecting. For example, if the remote computer is connecting with the ssh client application, the OpenSSH server sets up a remote control session after authentication. If a remote user connects to an OpenSSH server with scp , the OpenSSH server daemon initiates a secure copy of files between the server and client after authentication. OpenSSH can use many authentication methods, including plain password, public key, and Kerberos tickets.

Installation

Installation of the OpenSSH client and server applications is simple. To install the OpenSSH client applications on your Ubuntu system, use this command at a terminal prompt:

sudo apt install openssh-client

To install the OpenSSH server application, and related support files, use this command at a terminal prompt:

sudo apt install openssh-server

The openssh-server package can also be selected to install during the Server Edition installation process.

Configuration

You may configure the default behavior of the OpenSSH server application, sshd , by editing the file /etc/ssh/sshd_config . For information about the configuration directives used in this file, you may view the appropriate manual page with the following command, issued at a terminal prompt:

man sshd_config

There are many directives in the sshd configuration file controlling such things as communication settings, and authentication modes. The following are examples of configuration directives that can be changed by editing the /etc/ssh/sshd_config file.

Prior to editing the configuration file, you should make a copy of the original file and protect it from writing so you will have the original settings as a reference and to reuse as necessary.

Copy the /etc/ssh/sshd_config file and protect it from writing with the following commands, issued at a terminal prompt:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.original sudo chmod a-w /etc/ssh/sshd_config.original

The following are examples of configuration directives you may change:

    To set your OpenSSH to listen on TCP port 2222 instead of the default TCP port 22, change the Port directive as such:

    To have sshd allow public key-based login credentials, simply add or modify the line:

    PubkeyAuthentication yes

    If the line is already present, then ensure it is not commented out.

    To make your OpenSSH server display the contents of the /etc/issue.net file as a pre-login banner, simply add or modify the line:

    Banner /etc/issue.net

    In the /etc/ssh/sshd_config file.

After making changes to the /etc/ssh/sshd_config file, save the file, and restart the sshd server application to effect the changes using the following command at a terminal prompt:

sudo systemctl restart sshd.service

Many other configuration directives for sshd are available to change the server application"s behavior to fit your needs. Be advised, however, if your only method of access to a server is ssh , and you make a mistake in configuring sshd via the /etc/ssh/sshd_config file, you may find you are locked out of the server upon restarting it. Additionally, if an incorrect configuration directive is supplied, the sshd server may refuse to start, so be extra careful when editing this file on a remote server.

Что такое и для чего нужен SSH

Безопасный шелл (SSH) - это сетевой протокол, обеспечивающий функции шелла на удалённой машине через безопасный канал. SSH несёт в себе различные улучшения безопасности, среди них аутентификация пользователя/хоста, шифрование данных и целостность данных, благодаря чему невозможны популярные атаки вроде подслушивания (eavesdropping), DNS/IP spoofing, подделка данных (data forgery), перехват соединения (connection hijacking) и т. д. Пользователям ftp, telnet или rlogin, которые используют протокол, передающий данные в виде открытого текста, крайне рекомендуется переключиться на SSH.

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

OpenSSH серверные/клиентские пакеты поставляются со следующими утилитами:

  • OpenSSH сервер: sshd (SSH daemon)
  • OpenSSH клиент: scp (безопасное удалённое копирование), sftp (безопасная передача файлов), slogin/ssh (безопасный удалённый вход), ssh-add (дополнение закрытого ключа), ssh-agent (агент аутентификации), ssh-keygen (управление ключами аутентификации).
Установка сервера и клиента OpenSSH на Linux

Если вы хотите установить сервер/клиент OpenSSH и настроить автоматический запуск сервера OpenSSH, следуйте следующим инструкциям, которые различаются в зависимости от дистрибутива.

Debian, Ubuntu или Linux Mint

$ sudo apt-get install openssh-server openssh-client

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

$ sudo update-rc.d ssh defaults

Fedora или CentOS/RHEL 7

$ sudo yum -y install openssh-server openssh-clients $ sudo systemctl start sshd service $ sudo systemctl enable sshd.service

CentOS/RHEL 6

$ sudo yum -y install openssh-server openssh-clients $ sudo service sshd start $ sudo chkconfig sshd on

Arch Linux

$ sudo pacman -Sy openssh $ sudo systemctl start sshd service $ sudo systemctl enable sshd.service

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

Если вы хотите настроить сервер OpenSSH, вы можете редактировать общесистемный файл конфигурации размещённый в /etc/ssh/sshd_config.

Есть пара опций OpenSSH, которые могут заинтересовать:
По умолчанию, sshd прослушивает порт 22 и ожидает входящие соединения ssh. Изменив порт по умолчанию для ssh, вы можете предотвратить различные автоматизированные атаки хакеров.
Если ваша машина имеет более чем один физический сетевой интерфейс, возможно вы заходите уточнить, какой из них связан с sshd, для этого вы можете использовать опцию ListenAddress. Эта опция помогает улучшить безопасность посредством ограничения входящих SSH только через особый интерфейс.

HostKey /etc/ssh/ssh_host_key

Оция HostKey определяет гда размещён персональный хост ключ.

PermitRootLogin no

Оция PermitRootLogin – может ли root входить в систему посредством ssh.

AllowUsers alice bob

Используя опцию AllowUsers вы можете выборочно отключить службу ssh для определённых пользователей Linux. Можно задать множество пользователей, разделяя их пробелами.

После того, как был изменён /etc/ssh/sshd_config , убедитесь, что перезапустили службу ssh.

Для перезапуска OpenSSH на Debian, Ubuntu или Linux Mint:

$ sudo /etc/init.d/ssh restart

Для перезапуска OpenSSH на Fedora, CentOS/RHEL 7 или Arch Linux:

$ sudo systemctl restart sshd.service

Для перезапуска OpenSSH на CentOS/RHEL 6:

$ sudo service sshd restart

Как подключиться к SSH

Подключение к SSH из Linux

Пользователям Linux не нужно устанавливать дополнительных программ.

Подключение к SSH из Windows

Скрыто от гостей

.

Cygwin – это не просто клиент SSH. Это мощный комбайн, в котором поддерживаются многие команды Linux. Например, в Cygwin очень легко создавать SSL-сертификаты (точно также, как и в Linux). В Windows для создания самоподписанных сертификатов нужно поплясать с бубном. В Cygwin очень удобно пользоваться cURL (не нужно ничего устанавливать отдельно) и т. д. Те, кому не хватает на Windows командной строки и программ Linux, в лице Cygwin найдут себе отдушину.

Установка Cygwin проста. Переходим на

Скрыто от гостей

И скачиваем

Скрыто от гостей

Скрыто от гостей

Скачается крошечный файл - это установщик. Установщик графический. Хоть он и содержит большое количество опций, все они довольно простые и многие знакомы по другим графическим установщикам. Если что-то непонятно, просто нажимайте «Далее». Пожалуй, только следующее окно может привести в замешательство:

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

Соединение SSH (общее для Linux и Windows)

Пользователи Linux открывают консоль, пользователи Windows печатают в Cygwin.

SSH нужна следующая информация для подключения:

  • IP или имя хоста
  • номер порта
  • имя пользователя
  • пароль пользователя
Два из этих параметров SSH может предположить: имя пользователя и номер порта. Если порт не указан, то предполагается порт по умолчанию. Если не указан пользователь, то используется то же имя, что и в системе, из которой происходит подключение. Например, адрес хоста для подключения 192.168.1.36 . Если я наберу

Ssh 192.168.1.36

Я вижу следующее

Alex@MiAl-PC ~ $ ssh 192.168.1.36 The authenticity of host "192.168.1.36 (192.168.1.36)" can"t be established. ECDSA key fingerprint is SHA256:sIxZeSuiivoEQ00RXAQHxylxuEA8SC5r/YPhL8wfp8s. Are you sure you want to continue connecting (yes/no)?

Поскольку я подключаюсь к хосту первый раз, то это незнакомый хост. У меня спрашивают, хочу ли я продолжить. Я набираю yes :

Warning: Permanently added "192.168.1.36" (ECDSA) to the list of known hosts. [email protected]"s password:

Хорошо, хост 192.168.1.36 добавлен в список знакомых хостов. У меня запрашивается пароль для пользователя Alex. Поскольку на сервере с SSH нет такого пользователя, но я нажимаю Ctrl+C (для разрыва) и ввожу команду вместе с именем пользователя удалённой системы. Пользователь вводится перед адресом удалённой машины и отделяется от адреса символом @. Символ @ на английском читается как at и можно перевести как «в». Т.е. запись [email protected] можно истолковать как «пользователь mial в машине 192.168.1.36 ».

Ssh [email protected]

Приглашение Alex@MiAl-PC сменилось приглашением mial@mint . Это означает, что мы уже на удалённой машине, т. е. у нас уже произошло соединение. Если нужно указать порт (если он отличается от стандартного), то порт нужно указывать после ключа -p. Например так:

Ssh [email protected] -p 10456

После подключения нас встречает примерно такое приветствие:

Linux mint 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt11-1 (2015-05-24) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Jun 16 15:32:25 2015 from 192.168.1.35

Из него следует, что удалённая машина - это Linux Mint, с ядром 3.16, 64-битная версия. Также важная информация о времени последнего входа и IP адресе с которого произошло соединение. Если время и IP вам незнакомы, а вы являетесь единственным пользователем, то ваша система скомпрометирована и нужно принимать соответствующие меры.

Наберём несколько команд, чтобы убедиться где мы и кто мы: pwd, [B]uname -a и т. д.:

Чтобы закончить сессию (отключиться), наберите

Или нажмите Ctrl+D .

Вход в SSH без ввода пароля

Во-первых, это просто удобнее. Во-вторых, это безопаснее.

Во-первых, нам нужно создать rsa ключи. Если вы пользователь Linux, то у вас всё в порядке. Если вы пользователь Windows, но вы не послушали мой совет и выбрали PuTTY, то у вас проблема и думайте сами, как её решать. Если у вас Cygwin, то всё также в порядке.

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

Ssh-keygen -t rsa

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

Теперь на удалённой машине нам нужно создать каталог.ssh. Про выполнение команда на удалённой машине ещё будет рассказано ниже. Пока просто копируете команду, не забывая поменять IP адрес и имя пользователя на свои:

Ssh [email protected] mkdir .ssh

Теперь нам нужно скопировать содержимое файла id_rsa.pub на удалённую машину. Сделать это очень просто (не забываем менять данные на свои):

Cat .ssh/id_rsa.pub | ssh [email protected] "cat >> .ssh/authorized_keys"

Теперь просто логинимся и больше никакой пароль у нас не спрашивают. И так теперь будет всегда.

Выполнение команд на удалённом сервере без создания сессии шелла

Кроме открытия сессии шелла на удалённой системе, ssh также позволяет выполнять отдельные команды на удалённой системе. Например, для выполнения команды tree на удалённом хосте с именем remote-sys и отображением результатов на локальной системе, нужно сделать так:

Ssh remote-sys tree

Мой реальный пример:

Ssh [email protected] tree

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

Ssh remote-sys "ls *" > dirlist.txt

Реальный пример:

Ssh [email protected] "ls *" > dirlist.txt cat dirlist.txt

Обратите внимание на одиночные кавычки в вышеприведённой команде. Это сделано потому, что мы не хотим, чтобы раскрытие пути было выполнено на локальной машине; поскольку нам нужно это выполнение на удалённой системе. Также если мы хотим стандартный вывод перенаправить в файл на удалённой машине, мы можем поместить оператор редиректа и имя файла внутри одиночных кавычек:

Ssh remote-sys "ls * > dirlist.txt"

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

Не менее интересный вариант выполнения команд приведён немного выше:

Cat .ssh/id_rsa.pub | ssh [email protected] "cat >> .ssh/authorized_keys"

  • Команда cat построчно считывает и отображает содержимое файла.ssh/id_rsa.pub , расположенного на локальной машине.
  • | (труба) передаёт то, что должно было бы появиться в стандартном выводе, другой команде.
  • Вместо команды, которая должна была бы обрабатывать передаваемые ей строки, происходит соединение к удалённой системе (ssh [email protected]).
  • На удалённую систему приходят строки, для которых предусмотрена команда cat >> .ssh/authorized_keys . Т.е. содержимое стандартного вывода построчно записывается в файл.ssh/authorized_keys, находящийся на удалённой машине.
Открытие графической программы, расположенной на удалённом компьютере

Для следующего фокуса нужно два компьютера с системой Linux. К сожалению, даже Cygwin с этим трюком не справляется. Причём оба Linux"а должны быть с графическим пользовательским интерфейсом.

Туннелирование с SSH

Среди всего прочего, что происходит когда устанавливается соединение с удалённым хостом через SSH, это создание зашифрованного туннеля, который образуется между локальной и удалённой системами. Обычно, этот туннель используется для того, чтобы набранные на локальной машине команды безопасно были переданы удалённой машине, а результат, также безопасно, прислан обратно.

В добавок к этой базовой функции, протокол SSH позволяет переправлять большинство типов трафика по зашифрованному туннелю, создавая некого рода VPN (виртуальную частную сеть) между локальной и удалённой системами.

Пожалуй самая часто используемая из этих функций - это возможность транслировать трафик систем X Window. На системе с запущенным X сервером (это машины, которые имеют графический пользовательский интерфейс) возможно запустить программу X клиента (графическое приложение) на удалённой системе и видеть результаты её работы на локальной системе. Сделать это просто. Например, я хочу подключиться к удалённому хосту remote-sys и на нём я хочу запустить программу xload. При этом видеть графический вывод этой программы я смогу на локальном компьютере. Делается это так:

Ssh -X remote-sys xload

Реальный пример:

Ssh -X [email protected] gedit

Т.е. SSH запускается с ключом -X. А затем просто запускается программа. Посмотрите на скриншот.

Я нахожусь в Kali Linux. Я успешно логинюсь к удалённому компьютеру по SSH. После этого я запустил программу gedit. Этой программы, может быть, даже нет на Kali Linux, но она точно есть в Linux Mint, к которой я и подключился. Результат работы этой программы я могу видеть на экране так, будто бы программа запущена локально. Но, повторюсь, я хочу, чтобы вы это поняли, запущенной программы gedit на локальном компьютере нет. Если я захочу сохранить результат работы gedit (или любой другой программы, открытой таким образом), то окажется, что она работает в окружении удалённого компьютера, видит его файловую систему и т. д. Это удобно, когда вы хотите настроить удалённый компьютер используя графический интерфейс.

О том, как передать изображение со всего рабочего стола вы узнаете в этой же статье далее, в секции «Как настроить VNC через SSH».

На некоторых системах для этого «фокуса» нужно использовать опцию “ -Y ” вместо опции “ -X ”.

Копирование с/на удалённый компьютер (scp и sftp)

scp

Пакет OpenSSH также включает две программы, которые использует зашифрованный туннель SSH для копирования файлов по сети. Первая программа – scp («безопасное копирование») – используется чаще, как и схожая с ней программа cp для копирования файлов. Наиболее заметная разница в том, что источником файла может быть удалённый хост после которого следует двоеточие и расположение файла. Например, если мы хотим скопировать документ, названный document.txt из нашей домашней директории на удалённую систему remote-sys в текущей рабочей директории на нашей локальной системе мы можем сделать так:

Scp remote-sys:document.txt . document.txt 100% 177 0.2KB/s 00:00

Реальный пример:

# удалим файл на локальной машине, если он есть rm dirlist.txt # создадим файл на удалённой машине ssh [email protected] "ls * > dirlist.txt" # проверим его наличие ssh [email protected] "ls -l" # скопируем его на локальную машину scp [email protected]:dirlist.txt . # проверим его содержимое cat dirlist.txt

  • [email protected] - имя пользователя и удалённый хост,
  • . (точка) означает, что файл нужно скопировать в текущую рабочую директорию на удалённом сервере, при этом имя файла останется прежним, т. е. nfile.txt
  • Памятка :

    Для копирования файла с B на A когда залогинены в B:
    scp /path/to/file username@a:/path/to/destination
    Копирование файла с B на A когда залогинены в A:
    scp username@b:/path/to/file /path/to/destination

    sftp

    Вторая программа для копирования файлов через SSH - это sftp . Как следует из её имени, она является безопасным заменителем ftp программ. sftp работает как и оригинальная ftp программа. Тем не менее, вместо отправки чистым текстом она использует зашифрованный туннель SSH. Важным преимуществом sftp перед ftp является то, что для неё не требуется запущенный FTP сервер на удалённом хосте. Для неё требуется только SSH сервер. Это означает, что любая удалённая машина, которая подключена через SSH клиент может также быть использована как FTP-подобный сервер. Вот пример сессии:

    Alex@MiAl-PC ~ $ sftp [email protected] Connected to 192.168.1.36. sftp> ls dirlist.txt newfile.txt nfile.txt temp Видео Документы Загрузки Изображения Музыка Общедоступные Рабочий стол Шаблоны sftp> lls dirlist.txt nfile.txt sftp> ls temp temp/TakeMeHome sftp> cd temp/ sftp> get TakeMeHome Fetching /home/mial/temp/TakeMeHome to TakeMeHome sftp> bye

    SFTP протокол поддерживается многими графическими файловыми менеджерами, которые можно найти в дистрибутивах Linux. Используя как Nautilus (GNOME), так и Konqueror (KDE), мы можем вводить URI (ссылки) начинающиеся на sftp:// в строку перехода и работать с файлами, расположенными на удалённой системе с запущенным SSH сервером.

    Если заметили ошибку, выделите фрагмент текста и нажмите Ctrl+Enter
    ПОДЕЛИТЬСЯ: