Многие веб-разработчики ежедневно используют 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 доступен по адресу [email protected]. Вы можете добавлять пользователей в учетную запись, но для простоты мы будем использовать [email protected].
Как только SSH включен (и вы установили пароль администратора в администраторе вашего сервера), вы можете запустить следующую строку для SSH на вашем сервере.
1
|
… где primarydomain.com — ваш основной домен MediaTemple. Затем вам будет предложено ввести пароль (пароль root, который вы установили на панели управления). Если вы не используете MediaTemple, вы также можете напрямую подключиться к IP-адресу вашего сервера.
Если вы используете общий хостинг, скорее всего, вы не будете входить в систему как root. Вместо этого вы войдете в систему с именем учетной записи пользователя. Например, если вы используете службу типа Site5, вы можете войти в систему с именем пользователя на поддомене, например так:
1
|
В конечном счете, эти конфигурации будут зависеть от вашей конкретной компании веб-сервера. Обратитесь к документации вашего хоста для получения дополнительной информации.
Как только вы «зашли», вы можете выполнять команды и просматривать файловую систему в терминале. В зависимости от вашего уровня доступа, вы можете установить что-то на свой сервер с помощью команд 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 на [email protected], где вы будете запускать эхо и объединение того, что вы передали в первой команде. Это звучит немного сложно, поэтому есть несколько альтернативных способов справиться с этим. По сути, вам не понадобятся разрывы строк и ваш открытый ключ в отдельной строке в файле с именем authorized_keys
на вашем сервере в каталоге ~ / .ssh /. Итак, если это первый или единственный ключ, который вы хотите использовать на своем сервере, вы можете запустить эту команду, чтобы скопировать его непосредственно в это место.
1
|
scp ~/.ssh/id_rsa.pub [email protected]:.ssh/authorized_keys
|
По сути, эта строка говорит: «скопируйте этот первый файл через SSH на сервер в этом месте относительно моего текущего домашнего каталога».
Как только ваш авторизованный ключ содержит ваш открытый ключ, вы можете попытаться войти на сервер с помощью ssh [email protected]. Если вы поместите свой открытый ключ в конфигурационные файлы 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 Without Hub
Обратите внимание: этот раздел требует небольшого знакомства с 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
|
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 [email protected]:/path/to/repo
git checkout -b staging
git push origin staging
cd /path/to/repo
git merge staging
|
По сути, здесь происходит то, что вы входите на сервер, переходите на нужный путь репо, создаете репозиторий и добавляете «промежуточную» ветку, которую вы можете перенести с локального компьютера. Затем вы создаете локальное репо и соответствующую «промежуточную» ветку на локальном компьютере и добавляете файлы для отслеживания в репо. Далее идет первоначальный коммит. Затем вы добавляете удаленный репозиторий в качестве псевдонима «origin». Затем вы перемещаете локальную промежуточную ветвь в промежуточную ветвь псевдонима «origin». Наконец, вы возвращаетесь на сервер и объединяете «промежуточную» ветку со стандартной «основной» веткой.
SFTP> FTP
Вы также можете использовать 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. Это было вокруг некоторое время, так что есть много документации, плавающей вокруг.
Спасибо за прочтение!