Статьи

SSH: что и как

Многие веб-разработчики ежедневно используют SSH («Secure Shell») для управления своими серверами, резервного копирования файлов, удаленной работы и множества других задач. Сегодня я объясню, что такое SSH, сделаю краткий обзор истории и, наконец, научу вас, как настроить его на удаленном сервере или даже в вашей локальной сети. Давайте начнем!


Если вы читаете это, скорее всего, вы хотя бы немного знакомы с терминалом (или в Windows, что-то вроде Cygwin). Если так, то вы поймете это быстрое функциональное объяснение SSH.

По сути, SSH использует сетевое соединение для входа в Терминал на другом компьютере.

Если вы не знакомы с Терминалом, есть много объяснений и руководств для начинающих по Терминалу, как в Nettuts +, так и в других местах. Сила SSH зависит от его простоты; предлагая вам доступ к терминалу другой машины, SSH переключается на поиск и дает вам полный контроль над удаленной машиной. Если вы понимаете силу Терминала и его непосредственное подключение к внутренней работе вашего локального компьютера, то вы понимаете силу SSH!


SSH был разработан в младенческом состоянии в 1995 году. Основной разработчик, Tatu Ylonen, разработал его как первый безопасный способ администрирования удаленной системы UNIX. До SSH единственные существующие инструменты отправляли информацию, такую ​​как пароли, в виде открытого текста.


Существует миллион руководств по настройке SSH. Мы специально рассмотрим один метод сегодня. Перво-наперво, вы хотите убедиться, что у вас есть SSH в вашей системе.

  • Mac — версия OpenSSH поставляется с предустановленной.
  • Windows — следуйте инструкциям, подобным этой или этой, чтобы установить Cygwin и пакет «openssh».
  • Linux — OpenSSH, скорее всего, уже установлен, но если это не так, вы можете следовать тому же руководству, чтобы установить его.

Чтобы определить, установлен ли SSH, запустите `which ssh` . Если Терминал возвращает что-то вроде /usr/bin/ssh , тогда все готово! В противном случае следуйте одному из этих руководств, чтобы установить его.

В этой статье я предполагаю, что вы используете версию OpenSSH; Существуют некоторые различия в конфигурации, которые зависят от вашей версии SSH. Мы расскажем, как настроить Mac для подключения к серверу MediaTemple с помощью одной команды SSH. После того, как на вашем компьютере установлен SSH, вам необходимо убедиться, что на целевом хосте включен SSH. SSH по умолчанию работает через порт 22; вы можете использовать инструмент командной строки, такой как nmap чтобы пропинговать ваш сервер, чтобы определить, принимает ли порт 22 входящие соединения, например:

1
sudo nmap -sS hostname.com

Конечно, у вас, вероятно, есть доступ к административному интерфейсу для сервера. Убедитесь, что вы просматриваете опции и включаете SSH. На сервере Mediatemple эта конфигурация находится под панелью управления сервером. Mediatemple SSH доступен по адресу root@primarydomain.com. Вы можете добавлять пользователей в учетную запись, но для простоты мы будем использовать root@primarydomain.com.

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

1
ssh root@primarydomain.com

… где primarydomain.com — ваш основной домен MediaTemple. Затем вам будет предложено ввести пароль (пароль root, который вы установили на панели управления). Если вы не используете MediaTemple, вы также можете напрямую подключиться к IP-адресу вашего сервера.

Если вы используете общий хостинг, скорее всего, вы не будете входить в систему как root. Вместо этого вы войдете в систему с именем учетной записи пользователя. Например, если вы используете службу типа Site5, вы можете войти в систему с именем пользователя на поддомене, например так:

1
ssh username@malta.site5.com

В конечном счете, эти конфигурации будут зависеть от вашей конкретной компании веб-сервера. Обратитесь к документации вашего хоста для получения дополнительной информации.

Как только вы «зашли», вы можете выполнять команды и просматривать файловую систему в терминале. В зависимости от вашего уровня доступа, вы можете установить что-то на свой сервер с помощью команд apt-get или wget. Вы можете управлять своим сервером Apache, редактировать файлы конфигурации с помощью текстового редактора на основе терминала, просматривать журналы ошибок, очищать кэши, просматривать файлы непосредственно на сервере, чтобы убедиться, что они являются правильной версией, и выполнять множество других задач системного администрирования более низкого уровня. , А что если вы захотите сделать больше, быстрее с SSH?


Есть множество мощных вещей, которые SSH открывает вам. Мы пропустим некоторые из них (поскольку некоторые из них более связаны с системным администратором, например, с туннелированием). Но мы пройдемся по нескольким полезным приемам.

Вы думаете про себя: «Кажется, должен быть более быстрый способ сделать это». Ты прав. И есть. Вместо того, чтобы запоминать свой домен, пароль и имя пользователя для каждого сервера, вы можете настроить несколько конфигураций, которые позволят вам ускорить процесс до чего-то подобного.

1
ssh myserver

С правильной конфигурацией, вы можете запустить это, и без необходимости вводить какие-либо пароли, IP-адреса или длинные доменные имена, вы находитесь в! Опять же, мы будем предполагать, что вы входите на сервер MediaTemple. Сначала мы сгенерируем ключи ssh . В основном это набор зашифрованных ключей, которые находятся в ~/.ssh на вашем локальном компьютере. У вас есть «открытый» ключ и «закрытый» ключ. Итак, обо всем по порядку, откройте новое окно терминала и создайте папку .ssh в вашем домашнем каталоге.

1
mkdir ~/.ssh

Далее вы сгенерируете свои ключи со следующей строкой. (Это прямо из документации MediaTemple.)

1
ssh-keygen -t rsa -b 2048 -f ~/.ssh/id_rsa -C «Comment about your key goes here.»

Эта строка сгенерирует ключ ssh типа rsa с 2048 битами (для безопасности) в указанном месте файла с указанным комментарием. Вам будет предложено ввести пароль, но он не является обязательным или необходимым; Если вы не предоставите пароль, вы сможете автоматически войти в систему. Тип RSA предназначен для версии протокола SSH 1. Тип DSA предназначен для версии протокола 2. Узнайте у своего веб-сервера, какую версию они используют. После того, как ваши ключи сгенерированы, вы запустите это, чтобы убедиться, что для ваших настроек SSH установлены правильные разрешения.

1
chmod 700 ~/.ssh && chmod 600 ~/.ssh/*

Далее вы загрузите свой открытый ключ на свой сервер. Есть довольно много способов сделать это; этот путь также взят из документов MediaTemple.

1
cat ~/.ssh/id_rsa.pub |

Этот код выводит ваш id_rsa.pub через `|` (pipe) в следующую команду, которая представляет собой SSH на root@example.com, где вы будете запускать эхо и объединение того, что вы передали в первой команде. Это звучит немного сложно, поэтому есть несколько альтернативных способов справиться с этим. По сути, вам не понадобятся разрывы строк и ваш открытый ключ в отдельной строке в файле с именем authorized_keys на вашем сервере в каталоге ~ / .ssh /. Итак, если это первый или единственный ключ, который вы хотите использовать на своем сервере, вы можете запустить эту команду, чтобы скопировать его непосредственно в это место.

1
scp ~/.ssh/id_rsa.pub root@example.com:.ssh/authorized_keys

По сути, эта строка говорит: «скопируйте этот первый файл через SSH на сервер в этом месте относительно моего текущего домашнего каталога».

Как только ваш авторизованный ключ содержит ваш открытый ключ, вы можете попытаться войти на сервер с помощью ssh username@example.com. Если вы поместите свой открытый ключ в конфигурационные файлы SSH каталога пользователя root, вы сможете войти в систему напрямую в root. Вас спросят о отпечатке пальца rsa; идти вперед и разрешить это действие. Он добавляет сервер, к которому вы подключаетесь, в файл known_hosts. Этот файл можно использовать для множества разных вещей, но особенно для защиты себя от так называемой атаки «человек посередине». Если вы хотите прочитать немного больше об этом, посмотрите это объяснение .

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

1
2
3
Host shortname
HostName somehost.com
User username

Где «короткое имя» — это псевдоним для сервера, на который вы хотите войти. Например, «Host myserver» позволит мне сделать ssh myserver . HostName — это местоположение вашего сервера, и, конечно, User — это ваше имя пользователя. У вас может быть User root на этом месте. После сохранения этого файла вы сможете выполнить простую команду для входа на сервер, например:

1
ssh shortname

Обратите внимание: этот раздел требует небольшого знакомства с Git .

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

Чтобы настроить это, убедитесь, что Git установлен как на хосте, так и на вашем локальном компьютере. Вам, возможно, придется пройти через компанию веб-сервера, чтобы установить Git. Затем запустите git init на вашем сервере в том месте, где вы хотите разместить Git-репозиторий. Конечно, вы можете сделать это сотнями разных способов, но если вы предпочитаете, чтобы у вас не было чистого хранилища, вы можете использовать ветки для отправки с локального компьютера. Вот общий рабочий процесс.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
ssh user@example.com
cd /path/to/repo
git init
git checkout -b staging
git checkout master
# disconnect from shell session using ctrl-d
cd /local/repo
git init
git add .
git commit -am «some message»
git remote add origin user@example.com:/path/to/repo
git checkout -b staging
git push origin staging
ssh user@example.com
cd /path/to/repo
git merge staging

По сути, здесь происходит то, что вы входите на сервер, переходите на нужный путь репо, создаете репозиторий и добавляете «промежуточную» ветку, которую вы можете перенести с локального компьютера. Затем вы создаете локальное репо и соответствующую «промежуточную» ветку на локальном компьютере и добавляете файлы для отслеживания в репо. Далее идет первоначальный коммит. Затем вы добавляете удаленный репозиторий в качестве псевдонима «origin». Затем вы перемещаете локальную промежуточную ветвь в промежуточную ветвь псевдонима «origin». Наконец, вы возвращаетесь на сервер и объединяете «промежуточную» ветку со стандартной «основной» веткой.

Вы также можете использовать SSH-протокол FTP (протокол передачи файлов), который по сути является более безопасной (зашифрованной) версией FTP, которая работает через порт 22 (а не по умолчанию порт FTP 21). Большинство FTP-клиентов также поддерживают SFTP. FileZilla (для Windows) и Fetch (для Mac) — два популярных (и бесплатных) SFTP / FTP-клиента.

Пока вы находитесь рядом с компьютером, который подключен к Интернету, имеет терминал и установлен SSH (например, любой Mac, подключенный к WiFi), вы можете получить доступ к вашему серверу через SSH. Это лучшая часть. Вам не требуется никаких настроек (при условии, что вы не установили никаких ограничений, требующих соответствующего ключа публикации), вы можете войти в систему со своим именем пользователя и паролем практически из любого места. Есть даже SSH клиенты для iOS и других мобильных устройств. Это очень мощная функция SSH, которая параллельна только в переносимости приложениями на основе браузера.

Надеюсь, вы сможете увидеть силу SSH в ежедневном цикле разработки.

Давайте представим, что вы и несколько приятелей работаете над некоторым кодом вместе. Предположим также, что у вас есть локальный компьютер, который вы полностью контролируете и используете в качестве сервера LAMP для разработки, на котором установлено несколько виртуальных машин. Вы можете использовать SSH локально для перемещения файлов на компьютер и с компьютера и компьютера разработчика. Вы даже можете настроить локальное Git (или SVN, или Mercurial) репо, работающее на SSH, чтобы держать все под контролем. Возможно, вы могли бы даже сделать машину разработки единственной машиной, которая подключена к удаленному серверу через SSH, так что код должен пройти определенный этап подготовки, прежде чем он может быть запущен в производство. Основой всех этих действий является SSH!

Надеюсь, вы сможете увидеть мощь SSH в ежедневном цикле разработки, особенно для команд, использующих контроль версий. Как я уже отмечал ранее, существует множество документации и множество других инструментов сетевого уровня, основанных на SSH или зависящих от него, которые дадут вам больший контроль и контроль над процессом разработки и вашим сервером. Кто знает? Может быть, однажды, вы все равно сможете стать системным администратором!


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

Спасибо за прочтение!