Если вы арендовали облачный сервер работающий на linux, значит на нём уже будет установлен ssh-server. Стоит заметить, что ssh-server и ssh-client это разные программы, однако в большинстве случаев, сервер и клиент устанавливаются вместе, если в дистрибутиве есть клиент, но нет сервера, достаточно ввести команду для установки того и другого:
sudo apt install ssh -y
Если команда выполняется от пользователя root, sudo вводить не обязательно.
Эта команда подходит для Debian / Ubuntu / LinuxMint и других дистрибутивов, в которых по умолчанию встроен пакетный менеджер apt
Для Fedora это пакетный менеджер dnf, для CentOS - yum, для RedHat - rpm, для Gentoo - emerge, для Arch - pacman и тд. Если у вас одна из этих систем, вероятно вы сами знаете как ставить в них программы, поэтому пропустим варианты установки для них.
Для termux в Android
pkg install openssh
Для запуска сервера в termux, нужно принудительно его запустить командой:
sshd
Для подключения к удалённому серверу нужно указать адрес сервера. Первое подключение спросит подтверждение, нужно ввести "yes", затем Enter
ssh localhost
В этом примере подключение происходит к "самому себе", то есть к localhost, это значение может быть ip-адресом сервера (123.123.123.123) или доменом в onion (myabrakadabra.onion), или обычным доменом в клирнете (example.com)После подключения, в локальном файле ~/.ssh/known_hosts будет добавлена строка/отпечаток удалённого хоста и следующее подключение не будет спрашивать подтверждение. Так же будет запрос ввести пароль пользователя на сервере, к которому подключаетесь
Как правило указывают имя пользователя на сервере, что бы получить доступ к его оболочке, если этого не сделать, программа будет пытаться получить доступ к оболочке пользователя с таким же именем, от которого происходит подключение.
ssh [email protected]
root имеет доступ ко всей системе, купленные облачные сервера обычно дают именно root доступ, а вы самостоятельно можете создать пользователей с ограниченными правами
SSH как и другие программы имеет свои опции, например, можно указать порт на котором слушает удалённый ssh-server. По умолчанию используется 22й порт, поэтому не обязательно его указывать, но можно этот порт изменить.
Для termux по умолчанию ssh-server работает на 8022!
ssh mytermuxserver.com -p 8022
Теперь сделаем подключение к серверу без ввода пароля, то есть по ключу. Для этого сначала нужно сгенерировать ключи:
ssh-keygen
Затем трижды нажмите Enter
В каталоге ~/.ssh появятся сгенерированные ключи: id_rsa (секретный ключ) и id_rsa.pub (публичный ключ)
Секретный ключ используется для проверки/подключения, а публичный помещается на удалённый сервер. Если к серверу происходит подключение, он шифрует сообщение публичным ключом и локальный демон ssh пытается его расшифровать своим секретным ключом, если расшифровка успешная, удалённый сервер одобряет авторизацию и даёт доступ к оболочке.
Вы можете вручную скопировать публичный ключ на удалённый сервер, либо использовать простую команду которая самостоятельно скопирует ключ
ssh-copy-id
Введите пароль пользователя на сервере и ключ скопируется
На сервере будет создан файл ~/.ssh/authorized_keys, в нём будет ваш содержание публичного ключа из локального хранилища (id_rsa.pub)
В этот файл будут добавляться другие публичные ключи и каждый клиент с соответствующей парой ключей(секретным ключом), будет иметь доступ к серверу.
После добавления ключа демон будет всё ещё работать на старой конфигурации, что бы авторизация происходила автоматически, без ввода пароля, нужно поправить конфиг и перезапустить демона
sudo nano /etc/ssh/sshd_config
Листайте вниз, ищите строки #PubkeyAuthentication и #PasswordAuthentication, эти строки нужно раскомментировать и привести значение к yes и no соответственно:
Здесь же, в начале файла можете изменить порт. Строку нужно раскомментировать, то есть убрать решетку в начале
Сохраняйте и закрывайте файл Ctrl+S / Ctrl+X
Теперь нужно перезапустить демон что бы он заново прочитал файл конфигурации
sudo systemctl restart sshd
Теперь можно подключаться к серверу без ввода пароля, для авторизации будет использоваться ключ ~/.ssh/id_rsa
Копирование файлов
В комплекте с ssh предусмотрена программа scp
Скопировать файл с локального хранилища на удалённый сервер:
scp ~/Pictures/mk.png [email protected]:~/photos/
Из удалённого сервера в локальное хранилище:
scp [email protected]:~/photos/mk.png ~/Pictures/mk.png
Выполнить команду на удалённом сервере и вернуть доступ к вводу в локальной оболочке:
ssh [email protected] 'ls /etc'
Вывод команды будет видно в локальной оболочке.
sudo apt install ssh -y
Если команда выполняется от пользователя root, sudo вводить не обязательно.
Эта команда подходит для Debian / Ubuntu / LinuxMint и других дистрибутивов, в которых по умолчанию встроен пакетный менеджер apt
Для Fedora это пакетный менеджер dnf, для CentOS - yum, для RedHat - rpm, для Gentoo - emerge, для Arch - pacman и тд. Если у вас одна из этих систем, вероятно вы сами знаете как ставить в них программы, поэтому пропустим варианты установки для них.
Для termux в Android
pkg install openssh
Для запуска сервера в termux, нужно принудительно его запустить командой:
sshd
Для подключения к удалённому серверу нужно указать адрес сервера. Первое подключение спросит подтверждение, нужно ввести "yes", затем Enter
ssh localhost
В этом примере подключение происходит к "самому себе", то есть к localhost, это значение может быть ip-адресом сервера (123.123.123.123) или доменом в onion (myabrakadabra.onion), или обычным доменом в клирнете (example.com)После подключения, в локальном файле ~/.ssh/known_hosts будет добавлена строка/отпечаток удалённого хоста и следующее подключение не будет спрашивать подтверждение. Так же будет запрос ввести пароль пользователя на сервере, к которому подключаетесь
Как правило указывают имя пользователя на сервере, что бы получить доступ к его оболочке, если этого не сделать, программа будет пытаться получить доступ к оболочке пользователя с таким же именем, от которого происходит подключение.
ssh [email protected]
root имеет доступ ко всей системе, купленные облачные сервера обычно дают именно root доступ, а вы самостоятельно можете создать пользователей с ограниченными правами
SSH как и другие программы имеет свои опции, например, можно указать порт на котором слушает удалённый ssh-server. По умолчанию используется 22й порт, поэтому не обязательно его указывать, но можно этот порт изменить.
Для termux по умолчанию ssh-server работает на 8022!
ssh mytermuxserver.com -p 8022
Теперь сделаем подключение к серверу без ввода пароля, то есть по ключу. Для этого сначала нужно сгенерировать ключи:
ssh-keygen
Затем трижды нажмите Enter
В каталоге ~/.ssh появятся сгенерированные ключи: id_rsa (секретный ключ) и id_rsa.pub (публичный ключ)
Секретный ключ используется для проверки/подключения, а публичный помещается на удалённый сервер. Если к серверу происходит подключение, он шифрует сообщение публичным ключом и локальный демон ssh пытается его расшифровать своим секретным ключом, если расшифровка успешная, удалённый сервер одобряет авторизацию и даёт доступ к оболочке.
Вы можете вручную скопировать публичный ключ на удалённый сервер, либо использовать простую команду которая самостоятельно скопирует ключ
ssh-copy-id
Введите пароль пользователя на сервере и ключ скопируется
На сервере будет создан файл ~/.ssh/authorized_keys, в нём будет ваш содержание публичного ключа из локального хранилища (id_rsa.pub)
В этот файл будут добавляться другие публичные ключи и каждый клиент с соответствующей парой ключей(секретным ключом), будет иметь доступ к серверу.
После добавления ключа демон будет всё ещё работать на старой конфигурации, что бы авторизация происходила автоматически, без ввода пароля, нужно поправить конфиг и перезапустить демона
sudo nano /etc/ssh/sshd_config
Листайте вниз, ищите строки #PubkeyAuthentication и #PasswordAuthentication, эти строки нужно раскомментировать и привести значение к yes и no соответственно:
Здесь же, в начале файла можете изменить порт. Строку нужно раскомментировать, то есть убрать решетку в начале
Сохраняйте и закрывайте файл Ctrl+S / Ctrl+X
Теперь нужно перезапустить демон что бы он заново прочитал файл конфигурации
sudo systemctl restart sshd
Теперь можно подключаться к серверу без ввода пароля, для авторизации будет использоваться ключ ~/.ssh/id_rsa
Использование SSH
SSH имеет очень широкие возможности и его применение ограничено лишь фантазией пользователя, этот инструмент ежедневно используется в любой серверной инфраструктуре и для личных нужд очень активно. Полный перечень возможностей это материал для целой энциклопедии, но мы рассмотрим только самое основное и необходимое, так как цель этого гайда, показать как подключаться и настраивать авторизацию по ключам.Копирование файлов
В комплекте с ssh предусмотрена программа scp
Скопировать файл с локального хранилища на удалённый сервер:
scp ~/Pictures/mk.png [email protected]:~/photos/
Из удалённого сервера в локальное хранилище:
scp [email protected]:~/photos/mk.png ~/Pictures/mk.png
Выполнить команду на удалённом сервере и вернуть доступ к вводу в локальной оболочке:
ssh [email protected] 'ls /etc'
Вывод команды будет видно в локальной оболочке.
Последнее редактирование: