Генерирование ключей

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

$ cd ~/.ssh
$ ls

У вас должно быть как минимум два файла "что-нибудь" и "что-нибудь.pub", где "что-нибудь" — обычно id_dsa или id_rsa, в моем случае это id_rsa и id_rsa.pub. Если же у вас нет таких файлов или вообще нет папки .ssh, их можно создать при помощи ssh-keygen, которая входит в состав пакета SSH в системах Linux/Mac, а также поставляется в составе MSysGit для Windows. Создаем SSH ключ:

$ biperch@biperch-desktop:~/.ssh$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/home/biperch/.ssh/id_rsa):
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
Your identification has been saved in /home/biperch/.ssh/id_rsa.
Your public key has been saved in /home/biperch/.ssh/id_rsa.pub.
The key fingerprint is:
82:b4:26:26:c8:b9:e4:1d:4f:11:fd:71:96:40:75:bb biperch@biperch-desktop
The key's randomart image is:
+--[ RSA 2048]----+
|     .. .oo...   |
|      .. . +. .  |
|    ..  . +  .   |
|o .. o.  .    .  |
|o+o.+.. S    E   |
|oooo+  .         |
| o . .           |
|                 |
|                 |
+-----------------+

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

Теперь вы можете обмениваться публичными ключами, и подключится друг к другу по SSH не вводя пароль. Для этого вам нужно скопировать содержимое id_rsa.pub и отправить нужному пользователю. Ключ выглядит примерно так:

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

xclip -sel clip < ~/.ssh/id_rsa.pub

Добавление SSH ключа в github.com

Получаем свой публичный ключ, копиру его из ~/.ssh/id_rsa.pub, и размещаем его в своих настройках на github.com

Заходим в настройки:

Заходим на вкладку ключей и добавляем новый SSH ключ:

Вводим название ключа, что бы знать откуда ключ, и в случае чего удалить его:

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

Добавление SSH ключа в bitbucket.org

Здесь все очень схоже с github, заходим в настройки:

Выбираем пункт меню SSH ключи:

Добавляем ключ:

Вводим название и сам ключ:

Нажимаем добавить ключ и все готово.

Добавление SSH ключа на сервер

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

1-й способ

Используем ssh-copy-id маленькая тулза для копирования ключей на удаленный сервер.

Заходим в директорию с ключами ~/.ssh и выполняем перенос:

$cd .ssh
$ssh-copy-id -i id_rsa.pub user@server.com
user@server.com password:

Где, user - имя удаленного пользователя (для логина), server.com - домен или IP адрес удаленного сервера. Нас попросят подтвердить пароль к пользователю user, далее ключ заносится в ~/.ssh/authorized_keys на стороне сервера. И нам открывается доступ на сервер по SSH без пароля. Зайти по SSH на сервер можно с помощью простой команды:

$ ssh user@server.com

2-й способ

$ cat ~/.ssh/id_rsa.pub | ssh user@server.com 'cat >> ~/.ssh/authorized_keys'

Где, user - имя удаленного пользователя (для логина), server.com - домен или IP адрес удаленного сервера. Каталог ~/.ssh при этом должен существовать, если его нет, нужно создать заранее и поставить на него правильные права доступа. Создаем:

remotehost$ mkdir ~/.ssh
remotehost$ chown -R user:user ~/.ssh/
remotehost$ chmod 700 ~/.ssh/

А далее подключаемся по SSH:

$ ssh user@server.com

Создание алиасов для SSH

Если вы имеете один или более серверов, то вам для подключения к нему нужно вводить ssh user@домен, но бывают случаи когда домены длинные или сложные и их все время нужно откуда то копировать (ssh ivanov_i@wf-MX-i3.extrt.int.company.net). Или у вас много серверов и всех не упомнишь, для этого есть алиасы, которые нас спасут. Алиасы живут в файле ~/.ssh/config и выглядит этот файл примерно так:

ost ric
        Hostname очень-длинное-имя-домена.доменная зона
        User Администратор
        ForwardX11 yes
        Compression yes
Host home
        Hostname myhome.dyndns.org
        User vasya
        PasswordAuthentication no

Используя алиасы мы получаем возможность использовать суровый синтаксис)))):

$ ssh ric

И подключаемся к очень-длинное-имя-домена.доменная зона пользователем Администратор.

Дополнительно

SSH может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:

ssh user@server ls /etc/

Выведет содержимое каталога etc.

Копирование файлов через SSH туда - сюда соответственно)):

#туда
$ scp path/myfile user@8.8.8.8:/full/path/to/new/location/
#сюда
$ scp user@8.8.8.8:/full/path/to/file /path/to/put/here

И на последок вот вам картинка: