[TOC]
Qnap NAS ssh 无法登录
用了几天,发现 ssh 挂了,无法登录。
问题
- ssh 登不上;无论怎么设置 允许 ssh 都无效。
- telnet 登不上(忘记初次 MAC 地址)
解决方案
- 开机情况下捅 reset 3秒。
- telnet 连上机器后查看
/etc/init.d/login.sh:
telnet [ip] [port]
>> login: admin
>> pwd: [first MAC]
>>
# /etc/init.d/login.sh start
Starting sshd service: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0755 for '/etc/ssh/ssh_host_rsa_key' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Unable to load host key "/etc/ssh/ssh_host_rsa_key": bad permissions
Unable to load host key: /etc/ssh/ssh_host_rsa_key
Permissions 0755 for '/etc/ssh/ssh_host_rsa_key' are too open => 修改权限:
[~] # chmod 400 /etc/ssh/ssh_host_rsa_key
[~] # ll -h /etc/ssh/ssh_host_rsa_key
-r-------- 1 admin administrators 2.6K 2023-02-07 10:13 /etc/ssh/ssh_host_rsa_key
[~] # /usr/sbin/sshd -f /etc/config/ssh/sshd_config -p 22
不明白系统是咋工作的,或者我干了什么操作(最可疑的是 scp),为啥会报这个。
后果
- nas 登录端口强制恢复到 8080
- crontab 任务掉了
RAID1 降级为单盘
https://forum.qnap.com/viewtopic.php?f=25&t=150513
1. 关机拔盘
2. 开机
提示,降级中。ssh 进入:
# mdadm --query -- detail /dev/md1 # 找到对应的 /dec/md{x}
# mdadm --grow /dev/md2 --raid-devices=1 -- force # 降级
这里,已经可以看到成为单盘里。(下次遇到,跳过 3,直接重启试试)
3. /etc/config/raid.conf
引用:
配置文件路径:"/etc/config/raid.conf",找到目标raid组; 删掉:"scrubstatus, eventskipped,eventcompleted,degradedcnt,data_0"开头的项及" [Remove] "; 修改: "data_1 = 2,xxx(序列号)" 改为 "data_0 = 1,xxx(序列号)" chunkSize的值改为0 readAhead的值改为0 databitmap的值改为1 ```
重要,改完这一步后,重启直接报错:磁盘损坏只读了
4. 快照恢复
本来改完 3,系统盘就 gg 了,还好找到一份快照,直接恢复成功了 
然后就可以愉快的做 ssd 缓存了。
crontab
crontab -e 重启后各种丢失。
# vi /etc/config/crontab
# crontab /etc/config/crontab
# /etc/init.d/crond.sh restart
# crontab -l # 顺序可能错乱
crontab 配置被清除/丢失/清空
稳定运行了几年的 crontab,某天发现配置已被清空成默认:
[admin@Home-Nas .@backup_config]# crontab -l
9 9,21 * * * /sbin/notify_update --nc 1>/dev/null 2>&1
0 3 * * 0 /etc/init.d/idmap.sh dump
0-59/20 3 * * * /sbin/adjust_time
0 1 * * * /etc/init.d/flush_memory.sh >/dev/null 2>&1
0 4 * * * /sbin/hwclock -s
0 3 * * * /sbin/clean_reset_pwd
0-59/15 * * * * /etc/init.d/nss2_dusg.sh
10 15 * * * /usr/bin/power_clean -c 2>/dev/null
0 2 * * * /sbin/qfstrim
0-59/10 * * * * /etc/init.d/storage_usage.sh
30 3 * * * /sbin/notice_log_tool -v -R
0 0 * * * /sbin/user_cmd -C 1>/dev/null 2>&1
0 3 * * * /etc/init.d/wcl_backup.sh
30 * * * * /etc/init.d/wcl_check.sh
30 7 * * * /sbin/clean_upload_file
*/10 * * * * /sbin/config_cache_util 0
55 6 * * * /share/CACHEDEV1_DATA/.qpkg/HybridBackup/rr2/scripts/insight/insight.sh -runall >/dev/null 2>&1
9 2 * * * /bin/sh /etc/init.d/disk_data_collection.sh
0 8 * * 1 /etc/init.d/poweroff
55 19 * * 6 /etc/init.d/startup
* * * * * /var/cache/netmgr/lock_timer.sh
0 12 * * * /mnt/ext/opt/LicenseCenter/bin/qlicense_tool local_check
0 0 * * * /usr/local/sbin/qulog-archive local_event retention 0 >/dev/null 2>&1
0 1 * * * /usr/local/sbin/qulog-archive remote_event retention 0 >/dev/null 2>&1
0 2 * * * /usr/local/sbin/qulog-archive local_access retention 0 >/dev/null 2>&1
0 3 * * * /usr/local/sbin/qulog-archive remote_access retention 0 >/dev/null 2>&1
0 4 * * * (source /etc/init.d/qulog.sh dummy; check_mariadb) >/dev/null 2>&1
50 7 * * * /sbin/qpkg_cli --check_license 0 > /dev/null 2>/dev/null
0 4 * * * /etc/init.d/wsd.sh restart
0 10 * * * /sbin/vs_refresh
4 3 * * 3 /etc/init.d/backup_conf.sh
50 20 * * * /mnt/ext/opt/QcloudSSLCertificate/bin/ssl_agent_cli
0 0 * * * /usr/local/sbin/qsh nc.archive >/dev/null 2>&1
0 1 * * * (source /etc/init.d/nc.sh dummy; check_mariadb) >/dev/null 2>&1
35 7 * * * /sbin/qsyncsrv_util -c > /dev/null 2>/dev/null
0 0 * * * /sbin/qsyncsrv_tool --fix > /dev/null 2>/dev/null
* 4 * * * /usr/sbin/logrotate /etc/config/mc_logr.conf
* 4 * * * /usr/sbin/logrotate /etc/config/mariadb_mc.logr
0 2 * * 0 /usr/local/medialibrary/bin/mymediadbcmd dbbackup >/dev/null 2>&1
0 0 * * * /usr/local/medialibrary/bin/mlidbcli clear --only-unused-thumb >/dev/null 2>&1
[admin@Home-Nas .@backup_config]#
一番搜索,貌似是传统艺能了,不过比较好奇,为什么运行了这么久才出问题。
由于不记得某些配置(流水账未记录的某些脚本)如何配的了,于是开始找寻文件备份方案。
方案
定位 .@backup_config
# 系统盘
[admin@Home-Nas .@backup_config]# pwd
/share/CACHEDEV1_DATA/.@backup_config
[admin@Home-Nas .@backup_config]# ll
total 168M
drwxr-xr-x 2 admin administrators 4.0K 2025-02-09 02:46 ./
drwxrwxrwx 45 admin administrators 4.0K 2025-02-09 02:29 ../
-rw-r--r-- 1 admin administrators 17M 2025-01-29 03:04 0_20250129_0304.bak
-rw-r--r-- 1 admin administrators 17M 2025-01-22 03:04 1_20250122_0304.bak
-rw-r--r-- 1 admin administrators 17M 2025-01-15 03:04 2_20250115_0304.bak
-rw-r--r-- 1 admin administrators 17M 2025-01-08 03:04 3_20250108_0304.bak
-rw-r--r-- 1 admin administrators 17M 2025-01-01 03:04 4_20250101_0304.bak
-rw-r--r-- 1 admin administrators 17M 2024-12-25 03:04 5_20241225_0304.bak
-rw-r--r-- 1 admin administrators 17M 2024-12-18 03:04 6_20241218_0304.bak
-rw-r--r-- 1 admin administrators 17M 2024-12-11 03:04 7_20241211_0304.bak
-rw-r--r-- 1 admin administrators 17M 2024-12-04 03:04 8_20241204_0304.bak
-rw-r--r-- 1 admin administrators 17M 2024-11-29 13:04 9_20241129_1304.bak
[admin@Home-Nas .@backup_config]# hexdump -C 0_20250129_0304.bak | head
00000000 50 4b 03 04 14 00 09 00 08 00 82 18 3d 5a 9f 57 |PK..........=Z.W|
00000010 1b 3a c8 3f 0f 01 54 1f 11 01 3b 00 1c 00 73 68 |.:.?..T...;...sh|
00000020 61 72 65 2f 43 41 43 48 45 44 45 56 31 5f 44 41 |are/CACHEDEV1_DA|
00000030 54 41 2f 2e 40 62 61 63 6b 75 70 5f 63 6f 6e 66 |TA/.@backup_conf|
00000040 69 67 2f 30 5f 32 30 32 35 30 31 32 39 5f 30 33 |ig/0_20250129_03|
00000050 30 34 2e 74 61 72 2e 67 7a 55 54 09 00 03 24 2a |04.tar.gzUT...$*|
00000060 99 67 20 2a 99 67 75 78 0b 00 01 04 00 00 00 00 |.g *.gux........|
00000070 04 00 00 00 00 13 e0 5b 1d 85 d0 a5 ae e3 c3 06 |.......[........|
00000080 78 84 72 ee 27 4a bf e3 2a 67 53 34 ef 68 ea b2 |x.r.'J..*gS4.h..|
00000090 47 01 2f aa eb ba 02 12 ba 61 1c 66 9c 28 e7 94 |G./......a.f.(..|
[admin@Home-Nas .@backup_config]#
unzip
找到是 zip 格式的文件,尝试 unzip 解析。
[admin@Home-Nas .@backup_config]# unzip 0_20250129_0304.bak
Archive: 0_20250129_0304.bak
[0_20250129_0304.bak] share/CACHEDEV1_DATA/.@backup_config/0_20250129_0304.tar.gz password:
skipping: share/CACHEDEV1_DATA/.@backup_config/0_20250129_0304.tar.gz incorrect password
[admin@Home-Nas .@backup_config]# unzip 0_20250129_0304.bak
Archive: 0_20250129_0304.bak
[0_20250129_0304.bak] share/CACHEDEV1_DATA/.@backup_config/0_20250129_0304.tar.gz password:
password incorrect--reenter:
password incorrect--reenter:
skipping: share/CACHEDEV1_DATA/.@backup_config/0_20250129_0304.tar.gz incorrect password
[admin@Home-Nas .@backup_config]#
密码不是 mac/admin/“admin” 密码,而是 /sbin/gen_encstr 这个神奇命令所输出的字符串,类似:V2@wewqeqwewelqwjwewqeA==
source:
结束
[admin@Home-Nas .@backup_config]# unzip -P "$(/sbin/gen_encstr)" 3_20250108_0304.bak
Archive: 3_20250108_0304.bak
inflating: share/CACHEDEV1_DATA/.@backup_config/0_20250108_0304.tar.gz
[admin@Home-Nas .@backup_config]# ls
0_20250129_0304.bak 2_20250115_0304.bak 4_20250101_0304.bak 6_20241218_0304.bak 8_20241204_0304.bak share/
1_20250122_0304.bak 3_20250108_0304.bak 5_20241225_0304.bak 7_20241211_0304.bak 9_20241129_1304.bak
[admin@Home-Nas .@backup_config]# cd share/CACHEDEV1_DATA/.\@backup_config/
[admin@Home-Nas .@backup_config]# ls
0_20250108_0304.tar.gz
[admin@Home-Nas .@backup_config]# tar xzf *.tar.gz
[admin@Home-Nas .@backup_config]# ll
total 17M
drwxr-xr-x 4 admin administrators 4.0K 2025-02-09 02:57 ./
drwxr-xr-x 3 admin administrators 4.0K 2025-02-09 02:57 ../
-rw-r--r-- 1 admin administrators 17M 2025-01-08 03:04 0_20250108_0304.tar.gz
drwxr-xr-x 4 admin administrators 4.0K 2025-02-09 02:57 etc/
drwxr-xr-x 3 admin administrators 4.0K 2025-02-09 02:57 share/
[admin@Home-Nas .@backup_config]# cat /etc/config/crontab
9 9,21 * * * /sbin/notify_update --nc 1>/dev/null 2>&1
0 3 * * 0 /etc/init.d/idmap.sh dump
0-59/20 3 * * * /sbin/adjust_time
0 1 * * * /etc/init.d/flush_memory.sh >/dev/null 2>&1
0 4 * * * /sbin/hwclock -s
# 结束
思考
本来写了个脚本监控 crontab 丢失,写完发现还是需放到 crontab 内运行,这样仍然有丢失风险。
所以需换个方式来触发 crontab 检查/补全 逻辑。
LetsEncrypt ssl 证书上传不上
原因 是网页只能接 RSA2048,而 LetsEncrypt 已经默认生成 ECDSA 了。
方案
# add -k 2048
./acme.sh --force --issue -k 2048 --dns dns_cf -d
emby ssl
openssl pkcs12 -export -out /tmp/wildcard.pfx -inkey privkey.pem -in cert.pem -certfile chain.pem
openssl 传递
需求:远端自动 renew ssl 证书,nas wget 后,自动替换。
openssl 版本问题
NAS 内置 openssl 1.1.1,远端使用 1.0.0,所以不可使用:
openssl enc -e -des3 -a -salt -k "xxx"
NAS 解析会报错:
# openssl -d xxx
18+1 records in
18+1 records out
9718 bytes (9.5KB) copied, 0.000038 seconds, 243.9MB/s
*** WARNING : deprecated key derivation used.
Using -iter or -pbkdf2 would be better.
bad decrypt
解决
升级远端(centos) openssl 与 nas 一致。
# remote centos
cd /root/.acme.sh/ && tar -czPf - DOMAIN_ECC/ | openssl aes-256-cbc -a -salt -pbkdf2 -k "XXX" | dd of="/data/static/FILE"
# nas
dd if=./FILE |openssl aes-256-cbc -d -a -pbkdf2 -k "XXX" | tar -zxPf -
替换 ssl 证书
参考 https://www.qnap.com/en/how-to/faq/article/how-to-replace-ssl-certificate-manually-on-ssh-console
cat domain.key domain.cer > /etc/stunnel/stunnel.pem
ffmpeg
需求
合并 QVR 的视频为一个。按天 merge。
问题
- 系统自带的 ffmpeg 版本比较旧,无法使用 acc 音频解码。导致无法合并。
- ffmpeg 对路径中 空格的识别问题
自带的 ffmpeg
ffmpeg version 3.3.6 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Debian 4.9.2-10)
configuration: --enable-cross-compile --arch=i686 --target-os=linux --disable-yasm --disable-static --enable-shared --enable-gpl --enable-libmp3lame --disable-libx264 --enable-libsoxr --enable-version3 --enable-nonfree --disable-openssl --disable-decoder=ac3 --disable-decoder=ac3_fixed --disable-decoder=eac3 --disable-decoder=dca --disable-decoder=truehd --disable-encoder=ac3 --disable-encoder=ac3_fixed --disable-encoder=eac3 --disable-encoder=dca --disable-decoder=hevc --disable-decoder=hevc_cuvid --disable-encoder=hevc_nvenc --disable-encoder=nvenc_hevc --disable-decoder=h264 --disable-decoder=h264_cuvid --disable-encoder=libx264 --disable-encoder=libx264rgb --disable-encoder=h264_nvenc --disable-encoder=nvenc --disable-encoder=nvenc_h264 --disable-decoder=mpeg2video --disable-decoder=mpegvideo --disable-decoder=mpeg2_cuvid --disable-encoder=mpeg2video --disable-decoder=mpeg4 --disable-decoder=mpeg4_cuvid --disable-decoder=msmpeg4v1 --disable-decoder=msmpeg4v2 --disable-decoder=msmpeg4v3 --disable-encoder=mpeg4 --disable-encoder=msmpeg4v2 --disable-encoder=msmpeg4v3 --disable-decoder=mvc1 --disable-decoder=vc1 --disable-decoder=vc1_cuvid --disable-decoder=vc1image --disable-decoder=aac --disable-decoder=aac_fixed --disable-decoder=aac_latm --disable-encoder=aac --disable-decoder=on2avc --disable-encoder=ssa --disable-encoder=ass --disable-encoder=dvbsub --disable-encoder=dvdsub --disable-encoder=movtext --disable-encoder=srt --disable-encoder=subrip --disable-encoder=text --disable-encoder=webvtt --disable-encoder=xsub --disable-encoder=movtext --disable-decoder=ssa --disable-decoder=ass --disable-decoder=dvbsub --disable-decoder=dvdsub --disable-decoder=ccaption --disable-decoder=pgssub --disable-decoder=jacosub --disable-decoder=microdvd --disable-decoder=movtext --disable-decoder=mpl2 --disable-decoder=pjs --disable-decoder=realtext --disable-decoder=sami --disable-decoder=stl --disable-decoder=srt --disable-decoder=subrip --disable-decoder=subviewe --disable-decoder=subviewe --disable-decoder=text --disable-decoder=vplayer --disable-decoder=webvtt --disable-decoder=xsub --disable-decoder=ccaption --disable-decoder=movtext --disable-decoder=subviewer --disable-decoder=subviewer1 --extra-ldflags='-L/root/workspace/x86_64/ndk/LinkFS/usr/lib -L/root/workspace/x86_64/ndk/Model/TS-X53/build/RootFS/usr/local/medialibrary/lib -Wl,--rpath -Wl,/usr/local/medialibrary/lib' --extra-cflags='-I/root/workspace/x86_64/ndk/LinkFS/usr/include -I/root/workspace/x86_64/ndk/Model/TS-X53/build/RootFS/usr/local/medialibrary/include -D_GNU_SOURCE -DQNAP -fstack-protector-strong -fPIE' --extra-ldexeflags='-pie -Wl,-pie' --prefix=/root/workspace/x86_64/ndk/Model/TS-X53/build/RootFS/usr/local/medialibrary
libavutil 55. 58.100 / 55. 58.100
libavcodec 57. 89.100 / 57. 89.100
libavformat 57. 71.100 / 57. 71.100
libavdevice 57. 6.100 / 57. 6.100
libavfilter 6. 82.100 / 6. 82.100
libswscale 4. 6.100 / 4. 6.100
libswresample 2. 7.100 / 2. 7.100
libpostproc 54. 5.100 / 54. 5.100
Hyper fast Audio and Video encoder
usage: ffmpeg [options] [[infile options] -i infile]... {[outfile options] outfile}...
解决
/opt/ffmpeg/ffmpeg -y -f concat -safe 0 -i ${TXT_FILE_PATH} -c:v copy ${TARGET_OUTPUT_FILE_PATH} & # nas
- 封装为
file '/path1 path2/file'即可。双引号不可工作。
Qsync 启用后无法工作
报错:文件同步已停止,用户家目录已被停用。
解决
不得不吐槽,只有一个报错,没有任何引导,qsync-client 也连接不上。必须去设置里修改:
找到『控制台』打开,依次打开『权限』-『用户』,点击『用户家目录』,将『启用所有用户的家目录』选项打勾,应用即可。
评论
滚动到评论区时自动载入。