Я как ответственный за настройку и защиту систем на базе Ubuntu
, доступ к системам предоставляю только при использовании сервиса SSH:
а для аутентификации логин + ключ никакого пароля, т.к. это нужно настраивать еще fail2ban
для защиты сервиса от перебора. Тем самым тратятся ресурсы сервера на обработку логов. И вот я задумался, я создал приватный и публичный ключ, прописал публичный ключ на сервере, отписал тем, кто просил доступ (по согласованию), а что, если у подрядчика не Windows
система, а Ubuntu.
Вот об этом и будет данная практическая заметка.
Шаг №1:
Посредством утилиты PuTTyGen
создаю публичный и приватный ключ:
На заметку: Если подключение к Ubuntu
системам (своим) на работе внутри доменной станции, то еще применяю защиту ключа парольной фразой:
Key passphrase:
Confirm passphrase:
т.к. на мою доменную запись если я не один системный администратор компании кто-либо сможет изменить пароль, зайти под ней моей рабочей станции и у него будет доступ к моим системам. Этого допустить нельзя.
Когда ключ защищен парольной фразой при каждом подключении его нужно будет указывать, как пример ниже:
Using username "ekzorchik".
Authenticating with public key "rsa-key-20230121"
Passphrase for key "rsa-key-20230121":
Шаг №2:
Сохраняю к себе в каталог публичный ключ и приватный ключ, как:
W:\polygon\tips_key\ekzorchik@db.ekzorchik.ru_private_key.ppk
W:\polygon\tips_key\ekzorchik@db.ekzorchik.ru_public_key
Шаг №3:
Базовые настройки доступа к хосту через сервис SSH:
ekzorchik@ekzorchik:~$ sudo nano /etc/ssh/sshd_config Port 33456 PermitRootLogin no PubkeyAuthentication yes AuthorizedKeysFile /etc/ssh/authorized_keys PasswordAuthentication no PermitEmptyPasswords no AllowGroups sshauth ekzorchik@ekzorchik:~$ sudo service ssh restart
+ настраиваю фаервол в виде надстройки над правилами iptables
, это либо ufw & firewalld
Шаг №4:
Копирую содержимое public_key
и прописываю его на сервере для подключения через SSH
клиента:
ekzorchik@ekzorchik:~$ sudo nano /etc/ssh/authorized_keys ssh-rsa AAAAB3NzaC1yc2EAAAABJQAAAQEAjhDEZVi8mZYc6B/yaOL5h6aXAYqNgV+6q5Jp/UTVZHLk/m1Bt20Vmd5OUoL0HpE0J31Lf05F0tId5ldWOJJi7B/3k/Zy0I6vL2GnprLYxOcYovxIM3ZnOgyBrbglEog/GeNLExp6vXZWgN1gC5WnRxGutzyCXkH1sNFI8baWnUftcbH15DXbgbj6t77qqjkIrOl7THwLlOhuOWrYtfzZLGTeoMIC6Bb4xrY1ZjQszj3mtbXl2jU8SBjOFsZVXjNxU/PMF7RLKV3ttqibquHHcZma4j77cY68sLfCzwAPO5Gdog7KnRnNZzGLvFviCgJAKaGin7kKF8ZgHNLw5UF/Aw== rsa-key-20230221
Шаг №5:
Проверяю, как работает подключение к Ubuntu
—хосту через ключ, к примеру, с Windows
системы. В этом случае использую клиент putty:
(Session)
Host Name (or IP address): db.ekzorchik.ru
Port: 33456
Connection type: SSH
(Connection) - Data
Auto-login username: ekzorchik
(Connection) - SSH - Auth
Private key file authentication: указываю путь до приватного ключа, к примеру W:\polygon\tips_key\ekzorchik@db.ekzorchik.ru_private_key.ppk
(Session)
Saved Sessions: ввожу для удобства db.ekzorchik.ru
и нажимаю Save
После через (Session) Saved Sessions
ввожу имя под которым сохранил и нажимаю Load
, а затем Open
и происходит подключение к Ubuntu
-системе, если есть защита парольной фразой, ввожу ее и вот я успешно подключился:
ekzorchik@ekzorchik:~$ cat /etc/hosts | grep ekzorchik 95.171.152.3 db.ekzorchik.ru ekzorchik@ekzorchik:~$
С этим все понятно.
Шаг №6:
А что если нужно с Ubuntu
системы подключаться использую ключ (приватный ключ), как быть в этом случае?
к примеру, у меня есть Ubuntu 18.04 Server (Client)
, моя домашняя система.
Открываю через PuTTYGen - Load
— выбираю ekzorchik@db.ekzorchik.ru_private_key.ppk (Приватный ключ)
, если защищен паролем вводим. После Conversions - Export OpenSSH key (force new file format)
и сохраняю его как <имя_подключения@<имя_хоста>.pem
, у меня это: W:\polygon\tips_key\ekzorchik@db.ekzorchik.ru_ubuntu_client.pem
Содержимое сконвертированного файла ekzorchik@db.ekzorchik.ru_ubuntu_client.pem:
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAACmFlczI1Ni1jdHIAAAAGYmNyeXB0AAAAGAAAABBS
и т.д.
cGjIQjaJu8C9MHc0ReCoAAAAEAAAAAEAAAEVAAAAB3NzaC1yc2EAAAABJQAAAQEA
WoXySn0HlUZ2KkS8+59SKB6YHV5nGnjEpp5pQUvusKP+GLsCFXb9H2QrD8noZ4PQ
lrk7juWYpDs6wQcGmGNopTznnXpKBRU843OeTPG7NbM/Zan15jnZw/vzC5ArJI3l
70XCrqvWCcDJ3LeDRi617Y7BkSYnYUd1W0sU0M0tgohn52vM
-----END OPENSSH PRIVATE KEY-----
копирую pem файл на Ubuntu 18.04 Server (Client):
либо Ctrl + C + Ctrl + V
и сохраняю, как ekzorchik@db.ekzorchik.ru_ubuntu_client.pem
, либо через WinSCP
передаю.
ekzorchik@srv-bionic:~$ mkdir ~/.ssh ekzorchik@srv-bionic:~$ nano ~/.ssh/ekzorchik@db.ekzorchik.ru_ubuntu_client.pem ekzorchik@srv-bionic:~$ chmod 700 ~/.ssh/ekzorchik@db.ekzorchik.ru_ubuntu_client.pem ekzorchik@srv-bionic:~$ ls -l ~/.ssh total 8 -rwx------ 1 ekzorchik ekzorchik 1901 Feb 28 08:23 ekzorchik@db.ekzorchik.ru_ubuntu_client.pem -rw-r--r-- 1 ekzorchik ekzorchik 444 Feb 28 08:23 known_hosts ekzorchik@srv-bionic:~$ md5sum ~/.ssh/ekzorchik@db.ekzorchik.ru_ubuntu_client.pem bbc422a0d6d626e233074e5ce887cec7 /home/ekzorchik/.ssh/ekzorchik@db.ekzorchik.ru_ubuntu_client.pem
Пробую подключиться к удаленному Ubuntu
—хосту через pem
файл
ekzorchik@srv-bionic:~$ ssh -i ~/.ssh/ekzorchik@db.ekzorchik.ru_ubuntu_client.pem ekzorchik@db.ekzorchik.ru -p 33456 "uname -a" The authenticity of host '[db.ekzorchik.ru]:33456 ([95.181.198.5]:33456)' can't be established. ECDSA key fingerprint is SHA256:n7q85Q9Kbzd4yf9MJTyx+76lfc0PhRfOiTEDKQwrFcg. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[db.ekzorchik.ru]:33456,[95.181.198.5]:33456' (ECDSA) to the list of known hosts. Enter passphrase for key '/home/ekzorchik/.ssh/ekzorchik@db.ekzorchik.ru_ubuntu_client.pem': Linux ekzorchik.ru 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-bionic:~$
Получилось, также первое подключение к удаленной Ubuntu
системе, точнее часть публичного ключа прописывает в файл:
ekzorchik@srv-bionic:~$ cat ~/.ssh/known_hosts |1|xQ692QIOXV7KnGSgUzltatj09sk=|ggLg4qbSZoNruIHtxNEnPtGgI1w= ecdsa-sha2-nistp256 AAAAE3VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGnmSGiObBMvrAuIMSusy/c2dKbKpEWvBoFIofvzbfEDmpCDCDGnmQX8gmTeoVUOniz+jAtaGYStpnSyr+d3wfU= |1|ckP2EmvhX6AHHHJ7qozEWl6Ix88=|sY+vDrSwtZFIrq9Bxnx+P1YsMXU= ecdsa-sha2-nistp256 AAAAE3VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBGnmSGiObBMvrAuIMSusy/c2dKbKpEWvBoFIofvzbfEDmpCDCDGnmQX8gmTeoVUOniz+jAtaGYStpnSyr+d3wfU= ekzorchik@srv-bionic:~$
Шаг №7:
Если Вы не стали заморачиваться экспортом приватного ключа в pem
файл, а просто отправили публичный и приватный ключ, к примеру разработчикам, то как им быть в этом случае:
On Ubuntu 18.04 Server
ekzorchik@srv-bionic:~$ file ekzorchik@db.ekzorchik.ru_private_key.ppk ekzorchik@db.ekzorchik.ru_private_key.ppk: ASCII text, with CRLF line terminators ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ sudo apt-get install -y putty-tools ekzorchik@srv-bionic:~$ puttygen ekzorchik@db.ekzorchik.ru_private_key.ppk -O private-openssh -o ekzorchik@db.ekzorchik.ru_private_key.pem Enter passphrase to load key: ekzorchik@srv-bionic:~$ file ekzorchik@db.ekzorchik.ru_private_key.pem ekzorchik@db.ekzorchik.ru_private_key.pem: PEM RSA private key ekzorchik@srv-bionic:~$ mv ekzorchik@db.ekzorchik.ru_private_key.pem ~/.ssh/ ekzorchik@srv-bionic:~$ ls -l ~/.ssh/ total 4 -rw------- 1 ekzorchik ekzorchik 1743 Feb 28 13:59 ekzorchik@db.ekzorchik.ru_private_key.pem -rw-r--r-- 1 ekzorchik ekzorchik 0 Feb 28 14:02 known_hosts ekzorchik@srv-bionic:~$ ekzorchik@srv-bionic:~$ ssh -i ~/.ssh/ekzorchik@db.ekzorchik.ru_private_key.pem ekzorchik@db.ekzorchik.ru -p 33456 "uname -a" Enter passphrase for key '/home/ekzorchik/.ssh/ekzorchik@db.ekzorchik.ru_private_key.pem': Linux ekzorchik.ru 5.4.0-139-generic #156-Ubuntu SMP Fri Jan 20 17:27:18 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux ekzorchik@srv-bionic:~$
И так заработало, т.е. конвертирование ppk
в pem
файл успешно отработало и получается, что можно в качестве клиентской операционной системы использовать любую редакцию и версию Ubuntu.
С другими ОС
не работает, потому будет работать или нет не представляю.
Итого, я поставил себе задачу разобрал ее как заметка, на этом у меня все, с уважением автор блога Олло Александр aka ekzorchik.