Задача: Хочу с Ubuntu 22.04 Server входить по SSH на Mikrotik RB2011UiAS-2HnD (6.47.4) без применения авторизации в виде логин + пароль, а только как логин + публичный ключ. Это нужно чтобы делать бекапы с устройств скриптом или просто у меня делать это.

В задаче участвуют:

  • Ubuntu 22.04 Server
  • IP: 172.35.35.15
  • Mikrotik RB2011UiAS-2HnD (version 6.47.4) – это мой домашний выступающий в качестве роутера, к нему подключен мой домашний интернет.
  • IP: 172.35.35.100

Шаг №1: Обновляем информацию об установленных пакетах:

ekzorchik@srv-us2204a:~$ sudo rm -Rf /var/lib/apt/lists
ekzorchik@srv-us2204a:~$ sudo apt-get update && sudo apt-get upgrade -y

Шаг №2: Создаем ключ сервера, тип RSA, ключ защищать паролем не буду, хотя на работе при подключении к vpn системе я использую защиту, т.к. когда я подключен по SSH то у меня в добавок открываются порты, через которые я могу взаимодействовать с системами внутри моей домашней сети за Mikrotik, к примеру, как в заметке: "Доступ к инфраструктуре через SSH туннель"

ekzorchik@srv-us2204a:~$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/ekzorchik/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ekzorchik/.ssh/id_rsa
Your public key has been saved in /home/ekzorchik/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:XCpXxMb2VY/aU+fBbnTTCRWg1MwmmWH7ptrfAIuNZ94 ekzorchik@srv-us2204a
The key's randomart image is:
+---[RSA 3072]----+
|         o.+Boo+o|
|         .B+o=+.+|
|         oo+o..**|
|       . +  oooo=|
|      . S  ..ooo.|
|       o  + = .. |
|         o * .   |
|          * . o  |
|         . o.E . |
+----[SHA256]-----+
ekzorchik@srv-us2204a:~$

Копирую сформированный ключ сервера id_rsa.pub в idrsa

ekzorchik@srv-us2204a:~$ cp ~/.ssh/id_rsa.pub ~/idrsa
ekzorchik@srv-us2204a:~$ file idrsa
idrsa: OpenSSH RSA public key

Шаг №3: Копируем созданный публичный ключ (idrsa) на Mikrotik:

ekzorchik@srv-us2204a:~$ scp idrsa ekzorchik@172.35.35.100:/

Шаг №4: Создаю на своем домашнем Mikrotikе учетную запись backup через которую я буду входить, не указывая связку логин и пароль:

ekzorchik@srv-us2204a:~$ ssh -V
OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ ssh -l ekzorchik 172.35.35.100
ekzorchik@ekzhome] > user add name=backup password=Aa1234567 group=read

На заметку: группа read включает в себя возможность входить на оборудование Mikrotik по SSH.

Шаг №5: Присваиваю созданной на Mikrotik учетной записи (Login: backup) публичный ключ Ubuntu 22.04 Server:

[ekzorchik@ekzhome] > user ssh-keys import public-key-file=idrsa user=backup
[ekzorchik@ekzhome] > quit
interrupted
           Connection to 172.35.35.100 closed.
ekzorchik@srv-us2204a:~$

Шаг №6: Проверяю, как я с Ubuntu 22.04 Server с помощью учетной записи backup смогу подключиться под SSH к Mikrotik RB2011:

ekzorchik@srv-us2204a:~$ sudo nano /etc/ssh/ssh_config
Host 172.35.35.100
        PubkeyAcceptedKeyTypes +ssh-rsa
ekzorchik@srv-us2204a:~$ ssh -l backup 172.35.35.100
  MMM      MMM       KKK                          TTTTTTTTTTT      KKK
  MMMM    MMMM       KKK                          TTTTTTTTTTT      KKK
  MMM MMMM MMM  III  KKK  KKK  RRRRRR     OOOOOO      TTT     III  KKK  KKK
  MMM  MM  MMM  III  KKKKK     RRR  RRR  OOO  OOO     TTT     III  KKKKK
  MMM      MMM  III  KKK KKK   RRRRRR    OOO  OOO     TTT     III  KKK KKK
  MMM      MMM  III  KKK  KKK  RRR  RRR   OOOOOO      TTT     III  KKK  KKK

  MikroTik RouterOS 6.47.4 (c) 1999-2020       http://www.mikrotik.com/
[?]             Gives the list of available commands
command [?]     Gives help on the command and list of arguments

[Tab]           Completes the command/word. If the input is ambiguous,
                a second [Tab] gives possible options

/               Move up to base level
..              Move up one level
/command        Use command at the base level
[backup@ekzhome] >

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

Шаг №7: А если использовать создание ключа, как DSA:

ekzorchik@srv-us2204a:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/ekzorchik/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/ekzorchik/.ssh/id_dsa
Your public key has been saved in /home/ekzorchik/.ssh/id_dsa.pub
The key fingerprint is:
SHA256:zXTijWaA8SP4aGi7fS/bpvtM4GCk6T13O4iuDT69PRk ekzorchik@srv-us2204a
The key's randomart image is:
+---[DSA 1024]----+
|      .          |
|     . +         |
|    o o + o .    |
|   = o . B =     |
|  = = o S B .    |
| o = oE. o       |
|  +.o.o+o        |
| ..=o+*=o.       |
|  ++=o=X*.       |
+----[SHA256]-----+
ekzorchik@srv-us2204a:~$

Шаг №8: Копирую сформированный DSA ключ на Mikrotik:

ekzorchik@srv-us2204a:~$ cp ~/.ssh/id_dsa.pub ~/iddsa
ekzorchik@srv-us2204a:~$ file iddsa
iddsa: OpenSSH DSA public key
ekzorchik@srv-us2204a:~$
ekzorchik@srv-us2204a:~$ scp iddsa ekzorchik@172.35.35.100:/
ekzorchik@172.35.35.100's password:
iddsa                                                                                                                                                                          100%  611    12.9KB/s   00:00
ekzorchik@srv-us2204a:~$

Шаг №9: Присваиваю публичный ключ iddsa учетной записи backup на Mikrotik:

[ekzorchik@ekzhome] > user ssh-keys print
Flags: R - RSA, D - DSA
 #   USER                       BITS KEY-OWNER
 0 R backup                     3072 ekzorchik@srv-us2204a
[ekzorchik@ekzhome] > user ssh-keys remove numbers=0
[ekzorchik@ekzhome] > user ssh-keys import public-key-file=iddsa user=backup
[ekzorchik@ekzhome] > quit
interrupted
           Connection to 172.35.35.100 closed.
ekzorchik@srv-us2204a:~$

Шаг №10: Инициируем подключение с Ubuntu 22.04 Server к Mikrotik с использованием ключа DSA и учетной записи backup, но увы подключение не проходит, не подхватывается ключ DSA:

ekzorchik@srv-us2204a:~$ ssh -l backup 172.35.35.100 -v
OpenSSH_8.9p1 Ubuntu-3, OpenSSL 3.0.2 15 Mar 2022
debug1: Reading configuration data /etc/ssh/ssh_config
debug1: /etc/ssh/ssh_config line 19: include /etc/ssh/ssh_config.d/*.conf matched no files
debug1: /etc/ssh/ssh_config line 21: Applying options for *
debug1: /etc/ssh/ssh_config line 55: Applying options for 172.35.35.100
debug1: Connecting to 172.35.35.100 [172.35.35.100] port 22.
debug1: Connection established.
debug1: identity file /home/ekzorchik/.ssh/id_rsa type 0
debug1: identity file /home/ekzorchik/.ssh/id_rsa-cert type -1
debug1: identity file /home/ekzorchik/.ssh/id_ecdsa type -1
debug1: identity file /home/ekzorchik/.ssh/id_ecdsa-cert type -1
debug1: identity file /home/ekzorchik/.ssh/id_ecdsa_sk type -1
debug1: identity file /home/ekzorchik/.ssh/id_ecdsa_sk-cert type -1
debug1: identity file /home/ekzorchik/.ssh/id_ed25519 type -1
debug1: identity file /home/ekzorchik/.ssh/id_ed25519-cert type -1
debug1: identity file /home/ekzorchik/.ssh/id_ed25519_sk type -1
debug1: identity file /home/ekzorchik/.ssh/id_ed25519_sk-cert type -1
debug1: identity file /home/ekzorchik/.ssh/id_xmss type -1
debug1: identity file /home/ekzorchik/.ssh/id_xmss-cert type -1
debug1: identity file /home/ekzorchik/.ssh/id_dsa type 1
debug1: identity file /home/ekzorchik/.ssh/id_dsa-cert type -1
debug1: Local version string SSH-2.0-OpenSSH_8.9p1 Ubuntu-3
debug1: Remote protocol version 2.0, remote software version ROSSSH
debug1: compat_banner: no match: ROSSSH
debug1: Authenticating to 172.35.35.100:22 as 'backup'
debug1: load_hostkeys: fopen /home/ekzorchik/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: SSH2_MSG_KEXINIT sent
debug1: SSH2_MSG_KEXINIT received
debug1: kex: algorithm: diffie-hellman-group-exchange-sha256
debug1: kex: host key algorithm: rsa-sha2-256
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(2048<7680<8192) sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_GROUP
debug1: SSH2_MSG_KEX_DH_GEX_GROUP received
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug1: expecting SSH2_MSG_KEX_DH_GEX_REPLY
debug1: SSH2_MSG_KEX_DH_GEX_REPLY received
debug1: Server host key: ssh-rsa SHA256:GT9WUFoMvEr90ycfepmZmNWMQCzNMAg+QnJawxdom7E
debug1: load_hostkeys: fopen /home/ekzorchik/.ssh/known_hosts2: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts: No such file or directory
debug1: load_hostkeys: fopen /etc/ssh/ssh_known_hosts2: No such file or directory
debug1: Host '172.35.35.100' is known and matches the RSA host key.
debug1: Found key in /home/ekzorchik/.ssh/known_hosts:1
debug1: rekey out after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug1: SSH2_MSG_NEWKEYS received
debug1: rekey in after 4294967296 blocks
debug1: Skipping ssh-dss key /home/ekzorchik/.ssh/id_dsa - corresponding algo not in PubkeyAcceptedAlgorithms
debug1: Will attempt key: /home/ekzorchik/.ssh/id_rsa RSA SHA256:XCpXxMb2VY/aU+fBbnTTCRWg1MwmmWH7ptrfAIuNZ94
debug1: Will attempt key: /home/ekzorchik/.ssh/id_ecdsa
debug1: Will attempt key: /home/ekzorchik/.ssh/id_ecdsa_sk
debug1: Will attempt key: /home/ekzorchik/.ssh/id_ed25519
debug1: Will attempt key: /home/ekzorchik/.ssh/id_ed25519_sk
debug1: Will attempt key: /home/ekzorchik/.ssh/id_xmss
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug1: Authentications that can continue: publickey,password
debug1: Next authentication method: publickey
debug1: Offering public key: /home/ekzorchik/.ssh/id_rsa RSA SHA256:XCpXxMb2VY/aU+fBbnTTCRWg1MwmmWH7ptrfAIuNZ94
debug1: Authentications that can continue: publickey,password
debug1: Trying private key: /home/ekzorchik/.ssh/id_ecdsa
debug1: Trying private key: /home/ekzorchik/.ssh/id_ecdsa_sk
debug1: Trying private key: /home/ekzorchik/.ssh/id_ed25519
debug1: Trying private key: /home/ekzorchik/.ssh/id_ed25519_sk
debug1: Trying private key: /home/ekzorchik/.ssh/id_xmss
debug1: Next authentication method: password
backup@172.35.35.100's password:

Исправляем, что делать чтобы подключиться:

ekzorchik@srv-us2204a:~$ sudo nano /etc/ssh/ssh_config
Host 172.35.35.100
        PubkeyAcceptedKeyTypes +ssh-dss

И после подключение успешно проходит:

ekzorchik@srv-us2204a:~$ ssh -l backup 172.35.35.100 "system resource print"
                   uptime: 1d18h44m1s
                  version: 6.47.4 (stable)
               build-time: Sep/16/2020 11:32:37
              free-memory: 98.4MiB
             total-memory: 128.0MiB
                      cpu: MIPS 74Kc V4.12
                cpu-count: 1
            cpu-frequency: 600MHz
                 cpu-load: 49%
           free-hdd-space: 106.9MiB
          total-hdd-space: 128.0MiB
  write-sect-since-reboot: 2814
         write-sect-total: 327104
               bad-blocks: 0.7%
        architecture-name: mipsbe
               board-name: RB2011UiAS-2HnD
                 platform: MikroTik

ekzorchik@srv-us2204a:~$

Итого, все разобрал, как на Ubuntu 22.04 Server производится подключение к оборудованию Mikrotik по ssh с применением публичного ключа без указания пароля. Это нужно к примеру, для бекапирования оборудования, я так использую данную заметку, чтобы не указывать логин и пароль каждый раз.

На этом пока все, с уважением автор блога Олло Александр aka ekzorchik.