tenhishadow / mbkp

Mikrotik backup script | simple bash script for doing encrypted backups of mikrotik devices(Routeros) via ssh. Script will do password-protected binary and encrypted with openssl export on regular basis
MIT License
25 stars 12 forks source link

Permission denied (password). #5

Closed schel4ok closed 3 years ago

schel4ok commented 3 years ago

I try to setup your backup script from Synology server, but has errors.

in mbkp.sh I changed ST_ROOT="/volume3/Documents/server/mikrotik/backup" in example.cfg I changed

TGT_HOSTNAME="router.spb.lan"
ST_ROOT="/volume3/Documents/server/mikrotik/backup"

then I created DSA key and imported it into Mikrotik

root@Server:~# ssh-keygen -t dsa
Your identification has been saved in /root/.ssh/id_dsa.
Your public key has been saved in /root/.ssh/id_dsa.pub.

scp id_dsa.pub admin@router.spb.lan:/

[admin@MikroTik router] > user ssh-keys import

Then in winbox if I go to system > users on the tab SSH Keys I can see imported certificate data

User = admin
Key owner = root@Server

Then I setup root/.ssh/config file

Host router.spb
  Hostname router.spb.lan
  Port 22
  User admin
  IdentityFile ~/.ssh/id_dsa

Task is done like that Снимок

I try to run script and have this report

Task Scheduler has completed a scheduled task.

Task: Mikrotik backup
Start time: Sat, 21 Nov 2020 21:27:39 GMT
Stop time: Sat, 21 Nov 2020 21:27:40 GMT
Current status: 1 (Interrupted)
Standard output/error:
Permission denied, please try again.
Permission denied, please try again.
Permission denied (password).
Permission denied, please try again.
Permission denied, please try again.
Permission denied (password).
ERR: cannot establish ssh-connection

From Server

On my server I can see ./router.spb.lan and ./router.spb.lan/archive directories created, but empty and log and readme file. In log file I can see following

#######
# logfile for /volume3/Documents/server/mikrotik/mbkp.sh
# The format is:
#       DATE;STATE;FILENAME
# author: tenhi(adm@tenhi.dev)
#######
   ###
    #

20201121_2126;fail;router.spb.lan_20201121_2126.backup
20201121_2126;fail;router.spb.lan_20201121_2126.export.des3
20201121_2127;fail;router.spb.lan_20201121_2127.backup
20201121_2127;fail;router.spb.lan_20201121_2127.export.des3

Then I go server command line to check ssh connection from server to router

root@Server:~# ssh router.spb
admin@router.spb.lan's password:

I suppose that the problem is that mikrotik still asking for a password, but it is not clear for me why.

tenhishadow commented 3 years ago

@schel4ok you could debug it using:

ssh -vvvvvvvvv user@host
bash -x script.sh
Then I go server command line to check ssh connection from server to router
root@Server:~# ssh router.spb
admin@router.spb.lan's password:

Акзактли, т.е. ты нагенерил, наимпортировал, а вот проверить именно коннетом не захотел? Вангую, что или 2 раза перегенеривал ssh, и у тебя id_rsa.pub от первого ключа или юзер может быть не тот, но так или иначе надо с этого наса просто проверить ssh-командой, не так ли? или есть третий вариант, который ты увидишь при запуске ssh с -vvvv, что просто права на id_rsa у тебя неправильные

tenhishadow commented 3 years ago
TGT_HOSTNAME="router.spb.lan"

aaand

Host router.spb

magic? Почему они разные?

schel4ok commented 3 years ago

TGT_HOSTNAME="router.spb.lan" и Host router.spb разные, потому что в example.cfg написано hostname must be the same as in your ~/.ssh/config Я это понял дословно: то что надо именно hostname вписать, а не Host.

Ну ладно. Удалил все старые ключи. Создал пользователя микротика без пароля и попробовал сделать через него. Создался только файл router.spb_20201123_2128.export.des3, а по второму файлу почему-то пришла ошибка LOG.txt

20201123_2128;fail;router.spb_20201123_2128.backup
20201123_2128;okay;router.spb_20201123_2128.export.des3

отчёт о выполнении скрипта из NAS

Current status: 0 (Normal)
Standard output/error:
scp error: /router.spb_20201123_2128.backup: no such file or directory!

Понятно когда оба не создаются, а когда только один, то странно. Оба же файла в одной директории.

tenhishadow commented 3 years ago

@schel4ok - попробуй назвать его mikrotik1, я думаю, что тут дело в точке в имени микротика. как видишь, экспортируется всё ок - потому как на микротике это не создаёт каких-то файлов. А вот бинарный бэкап или создать не может файл с точкой, или потом перекопировать его

schel4ok commented 3 years ago

всё равно scp error: /routerspb_20201123_2152.backup: no such file or directory!

tenhishadow commented 3 years ago

@schel4ok дык попробуй запустить скрипт через ```bash -x````, чтобы посмотреть дебаг и понять: он не видит source или target? файл, который копировать или директорию куда записать?

schel4ok commented 3 years ago

Сейчас почему-то всё сразу стало работать, хотя я нихрена не менял. Даже хост обратно вернул Host router.spb и всё без ошибок бэкапится. Дальше начал тестировать пошагово.

  1. Поменял юзера на микротике с админа на простого backup_user с правами read или write - скрипт работает на половину. На сервак прилетает только файл export.des3, а backup нет. И в письме с отчётом о работе скрипта приходит not enough permissions. Всё хорошо работает только когда backup_user на микротике имеет права группы full.

  2. Дальше генерирую dsa ключи заново и копирую router-spb_dsa.pub на микротик и сразу же получаю опять ошибку в письме

    Permission denied (password).
    ERR: cannot establish ssh-connection

Вот проверка ssh-командой.

root@Server:~/.ssh# ssh -vvvvvvvvv router.spb
OpenSSH_7.4p1, OpenSSL 1.0.2u-fips  20 Dec 2019
debug1: Reading configuration data /root/.ssh/config
debug1: /root/.ssh/config line 1: Applying options for router.spb
debug2: resolving "router.spb.lan" port 22
debug2: ssh_connect_direct: needpriv 0
debug1: Connecting to router.spb.lan [192.168.1.1] port 22.
debug1: Connection established.
debug1: permanently_set_uid: 0/0
debug1: identity file /root/.ssh/router-spb_dsa type 2
debug1: key_load_public: No such file or directory
debug1: identity file /root/.ssh/router-spb_dsa-cert type -1
debug1: Enabling compatibility mode for protocol 2.0
debug1: Local version string SSH-2.0-OpenSSH_7.4
debug1: Remote protocol version 2.0, remote software version ROSSSH
debug1: no match: ROSSSH
debug2: fd 3 setting O_NONBLOCK
debug1: Authenticating to router.spb.lan:22 as 'backup_user'
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type RSA in file /root/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from router.spb.lan
debug3: order_hostkeyalgs: prefer hostkeyalgs: ssh-rsa-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa
debug3: send packet: type 20
debug1: SSH2_MSG_KEXINIT sent
debug3: receive packet: type 20
debug1: SSH2_MSG_KEXINIT received
debug2: local client KEXINIT proposal
debug2: KEX algorithms: curve25519-sha256,curve25519-sha256@libssh.org,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group-exchange-sha256,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha256,diffie-hellman-group14-sha1,ext-info-c
debug2: host key algorithms: ssh-rsa-cert-v01@openssh.com,rsa-sha2-512,rsa-sha2-256,ssh-rsa,ecdsa-sha2-nistp256-cert-v01@openssh.com,ecdsa-sha2-nistp384-cert-v01@openssh.com,ecdsa-sha2-nistp521-cert-v01@openssh.com,ssh-ed25519-cert-v01@openssh.com,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,ssh-ed25519
debug2: ciphers ctos: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc
debug2: ciphers stoc: chacha20-poly1305@openssh.com,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,aes128-cbc,aes192-cbc,aes256-cbc
debug2: MACs ctos: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: MACs stoc: umac-64-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-256-etm@openssh.com,hmac-sha2-512-etm@openssh.com,hmac-sha1-etm@openssh.com,umac-64@openssh.com,umac-128@openssh.com,hmac-sha2-256,hmac-sha2-512,hmac-sha1
debug2: compression ctos: none,zlib@openssh.com,zlib
debug2: compression stoc: none,zlib@openssh.com,zlib
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug2: peer server KEXINIT proposal
debug2: KEX algorithms: diffie-hellman-group-exchange-sha256,diffie-hellman-group-exchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1
debug2: host key algorithms: ssh-dss,ssh-rsa
debug2: ciphers ctos: aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc
debug2: ciphers stoc: aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,aes192-cbc,aes256-cbc,blowfish-cbc,3des-cbc
debug2: MACs ctos: hmac-sha1,hmac-md5
debug2: MACs stoc: hmac-sha1,hmac-md5
debug2: compression ctos: none
debug2: compression stoc: none
debug2: languages ctos:
debug2: languages stoc:
debug2: first_kex_follows 0
debug2: reserved 0
debug1: kex: algorithm: diffie-hellman-group-exchange-sha256
debug1: kex: host key algorithm: ssh-rsa
debug1: kex: server->client cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug1: kex: client->server cipher: aes128-ctr MAC: hmac-sha1 compression: none
debug3: send packet: type 34
debug1: SSH2_MSG_KEX_DH_GEX_REQUEST(2048<7680<8192) sent
debug3: receive packet: type 31
debug1: got SSH2_MSG_KEX_DH_GEX_GROUP
debug2: bits set: 1013/2048
debug3: send packet: type 32
debug1: SSH2_MSG_KEX_DH_GEX_INIT sent
debug3: receive packet: type 33
debug1: got SSH2_MSG_KEX_DH_GEX_REPLY
debug1: Server host key: ssh-rsa SHA256:myabbracadabra
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type RSA in file /root/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from router.spb.lan
debug3: hostkeys_foreach: reading file "/root/.ssh/known_hosts"
debug3: record_hostkey: found key type RSA in file /root/.ssh/known_hosts:1
debug3: load_hostkeys: loaded 1 keys from 192.168.1.1
debug1: Host 'router.spb.lan' is known and matches the RSA host key.
debug1: Found key in /root/.ssh/known_hosts:1
debug2: bits set: 992/2048
debug3: send packet: type 21
debug2: set_newkeys: mode 1
debug1: rekey after 4294967296 blocks
debug1: SSH2_MSG_NEWKEYS sent
debug1: expecting SSH2_MSG_NEWKEYS
debug3: receive packet: type 21
debug1: SSH2_MSG_NEWKEYS received
debug2: set_newkeys: mode 0
debug1: rekey after 4294967296 blocks
debug1: Skipping ssh-dss key /root/.ssh/router-spb_dsa - not in PubkeyAcceptedKeyTypes
debug3: send packet: type 5
debug3: receive packet: type 6
debug2: service_accept: ssh-userauth
debug1: SSH2_MSG_SERVICE_ACCEPT received
debug3: send packet: type 50
debug3: receive packet: type 51
debug1: Authentications that can continue: publickey,password
debug3: start over, passed a different list publickey,password
debug3: preferred publickey,keyboard-interactive,password
debug3: authmethod_lookup publickey
debug3: remaining preferred: keyboard-interactive,password
debug3: authmethod_is_enabled publickey
debug1: Next authentication method: publickey
debug2: we did not send a packet, disable method
debug3: authmethod_lookup password
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
backup_user@router.spb.lan's password:

Я тут нихрена не понял. Кажется публичный ключ найти не может. Но он же там есть. И он импортирован на юзера backup_user, который у меня указан в файле .ssh/config

На микротик ключ скопирован и импортирован mikrotik ssh

tenhishadow commented 3 years ago

@schel4ok так а почему вот дебаг тупо через гуглопереводчик не перевести? вот же ошибка, нет?

debug1: Skipping ssh-dss key /root/.ssh/router-spb_dsa - not in PubkeyAcceptedKeyTypes
...
debug3: remaining preferred: ,password
debug3: authmethod_is_enabled password
debug1: Next authentication method: password
backup_user@router.spb.lan's password:

перебирая все ключи, твой клиент увидел, что ключ /root/.ssh/router-spb_dsa не подходит под PubkeyAcceptedKeyTypes и так об этом тебе и написал, нет?

Это кагбэ даже не мой скрипт, это обычная работа ssh, здесь конкретно - клиента, который на синоложи хрен пойми какой

tenhishadow commented 3 years ago

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

бат леть ми гугль ит фор ю май френд: https://unix.stackexchange.com/questions/247612/ssh-keeps-skipping-my-pubkey-and-asking-for-a-password/247614

schel4ok commented 3 years ago

То что ошибка была примерно тут debug1: Skipping ssh-dss key /root/.ssh/router-spb_dsa - not in PubkeyAcceptedKeyTypes я как раз догадался, а вот что с этим делать мне было вообще непонятно. Я с этими ключами раньше ни разу не сталкивался и хз почему они могут подходить или не подходить. Спасибо за подсказку.

Просто заменил ключ dsa на rsa ssh-keygen -t rsa и теперь всё работает!

А как теперь сделать, чтобы сразу с нескольких микротиков бэкапы собирать?

tenhishadow commented 3 years ago

@schel4ok нутк вот обычно ж люди гуглят по ошибке. Если ты не сталкивался с dsa, зачем их такие генерил вообще тогда? Мог быть просто -t не использовать и у тебя по дефолту было бы rsa

А как теперь сделать, чтобы сразу с нескольких микротиков бэкапы собирать?

schel4ok commented 3 years ago

Я и с RSA тоже не знаком. По поводу нескольких понял. А нафига пароль на файл экспорта? Если кто-то смог спереть этот файл, то он скорее всего и скрипт экспорта тоже спёр с паролем на расшифровку.

tenhishadow commented 3 years ago

Я и с RSA тоже не знаком. По поводу нескольких понял.

А нафига пароль на файл экспорта? Если кто-то смог спереть этот файл, то он скорее всего и скрипт экспорта тоже спёр с паролем на расшифровку.