Поиск…


замечания

SSH (Secure Shell) - это криптографический протокол для двухточечной связи по небезопасной сети (Интернет). Он устаревает старых протоколов, используемых в старые времена ( rlogin , rsh , telnet ).

Он обычно используется для подключения к удаленным серверам, виртуальным машинам или контейнерам в центре обработки данных или в вашем частном облаке (Google Compute Engine, AWS, ...). Но он также широко используется совместно с git для безопасного и безопасного доступа к вашему хранилищу и с использованием открытых ключей вместо паролей.

Следует также упомянуть любые крупные темы в ssh и ссылки на связанные темы. Поскольку документация для ssh является новой, вам может потребоваться создать начальные версии этих связанных тем. СДЕЛАТЬ

Версии

Версия Примечания к выпуску Дата выхода
OpenSSH 7.3p1 Последняя версия 2016-08-01
OpenSSH 7.2p2 2016-03-09
OpenSSH 7.1p2 2016-01-14
OpenSSH 7.1 2015-08-21
OpenSSH 7.0 2015-11-08
OpenSSH 6.9 2015-07-01
OpenSSH 6.8 2015-03-18

Установка или настройка

Бесплатная версия реализации протокола SSH, OpenSSH доступна во всех дистрибутивах Linux. Он состоит из серверных и клиентских пакетов.

Монтаж

В Debian на базе Linux вы можете установить openssh используя

# apt-get install openssh-server openssh-client

В RHEL / CentOS вам нужно использовать yum :

# yum install openssh-server openssh-clients

Текущая Fedora использует dnf вместо yum .

В Arch Linux используйте pacman:

# pacman -S openssh

В OSX openssh должен быть уже установлен.

Если вы хотите использовать более новую версию, вам нужно установить openssh из заваривания:

# brew install openssh --with-brewed-openssl --with-keychain-support

Инструкции TODO для Windows

Настроить

Клиент openssh не нуждается в специальной настройке и готов к использованию сразу после установки. Вы можете попробовать запустить ssh remote , где remote - это удаленный хост, на котором запущен ssh сервер.

Сервер openssh обычно запускается после установки и установки по умолчанию. Если нет, то вы можете запустить его на systemd систем на основе использования

В Debian на базе Linux с systemd:

# systemctl start ssh

На RHEL / CentOS / Fedora и Arch Linux:

# systemctl start sshd

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

# service sshd start

конфигурация

У openssh есть файлы конфигурации в /etc/ssh/ . Клиент также считывает конфигурацию клиента в файле ~/.ssh/config . Сервер использует файл sshd_config , который содержит большинство значений по умолчанию и содержит простые пары ключ-значение. Пример:

Protocol 2
PasswordAuthentication yes
ChallengeResponseAuthentication no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY
X11Forwarding yes
Subsystem    sftp    /usr/libexec/openssh/sftp-server

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

Вы можете создать свой ssh-ключ, используя ssh-keygen, это программа, которая является частью установки ssh. Для этого просто запустите его и следуйте инструкциям на экране.

Вот пример:

$ ssh-keygen
Generating public/private rsa key pair.

Каталог по умолчанию, в котором будет сохранена пара ключей ssh, находится внутри папки .ssh в вашем домашнем каталоге (вы можете изменить это, указав допустимый путь), а по умолчанию для ключевой id_rsa.pub - id_rsa для закрытого ключа и id_rsa.pub для открытый ключ:

Enter file in which to save the key (/home/nasreddine/.ssh/id_rsa): /home/my_folder/my_ssh_key

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

Enter passphrase (empty for no passphrase):
Enter same passphrase again:

После ввода вашей кодовой фразы ssh-keygen сгенерирует ключ и сохранит его до выбранного вами пути:

Your identification has been saved in /home/my_folder/my_ssh_key.
Your public key has been saved in /home/my_folder/my_ssh_key.pub.

Были сделаны. Теперь наш ключ ssh готов к использованию.

введите описание изображения здесь

Как SSH в машину

Чтобы войти в учетную запись пользователя на компьютере с SSH, вы можете использовать команду ssh username@ip_address . Он попросит пароль. Если вы введете правильный пароль, вы будете подключены к оболочке этого пользователя на этом компьютере. В противном случае он снова запросит пароль.

Например

root@dev10:~# ssh [email protected]
[email protected]'s password: 
Welcome to Ubuntu 16.04 LTS (GNU/Linux 4.4.0-31-generic x86_64)
    
Last login: Fri Jul 22 18:33:27 2016 from 10.11.50.10
root@dev2:~# 

Если вы хотите использовать конкретный ключ ssh для подключения к машине, используйте ssh -i /path/to/ssh_secret_key username@host

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

ssh-keygen -l -E md5 -f /etc/ssh/ssh_host_ecdsa_key.pub

Вы можете ввести «да», если оба они одинаковы. Он перейдет к приглашению пароля.

Пример:

root@dev10:~# ssh [email protected]
The authenticity of host '10.11.50.3 (10.11.50.3)' can't be established.
ECDSA key fingerprint is dd:a3:de:cd:5b:01:cd:0b:b6:bc:b3:09:c2:c8:1a:68.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.11.50.3' (ECDSA) to the list of known hosts.
[email protected]'s password: 

Last login: Fri Jul 22 17:45:09 2016 from 10.11.1.71
root@dev2:~# 

Добавление открытого ключа в список авторизованных ключей сервера

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

ssh-copy-id -i ~/.ssh/<identity>.pub <user>@<hostname>

Что также можно сделать вручную:

cat ~/.ssh/<identity>.pub | ssh <user>@<hostname> 'cat >> ~/.ssh/authorized_keys'

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

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

Когда вам действительно нужно подключить ssh соединение, соединение пароля с командой ssh не работает ( echo passw0rd | ssh host ). Это связано с тем, что пароль не считывается со стандартного ввода, а непосредственно из TTY (телепринтер, телетайп, Teletype по историческим причинам).

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

$ sshpass -p passw0rd ssh host
$ sshpass -f /secret/filename ssh host
$ SSHPASS=passw0rd sshpass -e ssh host

Параметры командной строки могут видеть другие пользователи в ps (во время выполнения она маскируется, но не во время запуска, и вы не можете положиться на нее):

... 23624  6216 pts/5    Ss   Aug30   0:00  \_ /bin/bash
... 12812  1988 pts/5    S+   08:50   0:00  |   \_ sshpass -p passw0rd ssh host
... 45008  5796 pts/15   Ss+  08:50   0:00  |       \_ ssh host

Обратите внимание, что переменные среды окружения процесса также доступны для других процессов в системе с использованием файла /proc/PID/environ .

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

Файл конфигурации

Конфигурационные файлы OpenSSH используются для конфигурации, которые должны применяться каждый раз при запуске клиента ssh. Большинство параметров командной строки можно вставить в файлы конфигурации.

OpenSSH использует конфигурацию из следующих источников:

  1. Параметры командной строки
  2. Конфигурационный файл пользователя ~/.ssh/config
  3. Системный файл конфигурации /etc/ssh/ssh_config

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

# This is a comment.

# Parameter can be specified like this, separated with white space.
StrictHostKeyChecking ask

# Or parameter key and value may be separated with white space and =.  
ForwardX11 = yes

# The parameter value can be quoted if it contains white space.    
IdentityFile "/file system/path with/white space"

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

Одной из наиболее полезных функций конфигурационного файла является его разделение на основе имени или адреса хоста. Таким образом, у вас могут быть разные конфигурации для разных хостов.

# Based on host name.    

Host host1.domain.com
    User user1

Host host2.domain.com
    User user2

# Or wildcard matching name or ip.

Host *elastic-cloud.com 10.201.4.?
    User user3

SSH-агент

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

Запустите ssh-agent в фоновом режиме:

eval "$(ssh-agent -s)"
# Agent pid 59566

И добавьте свой ключ в ssh-agent, вам будет предложено ввести вашу кодовую фразу:

ssh-add ~/.ssh/matrix.ac
# Enter passphrase for /home/osaka/.ssh/matrix.ac: 
# Identity added: /home/osaka/.ssh/matrix.ac (/home/osaka/.ssh/matrix.ac)

Готово. Теперь подключитесь к ssh [email protected] и вам не нужно вводить кодовую фразу. Вы можете расширить его, используя такие программы, как gnome-keyring / seahorse, keychain и другие ключевые менеджеры.



Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow