Задача: Хочу с 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.