甲骨文云服务器丢失密钥和忘记密码无法登录SSH的终极方案
1 背景博主的ORACLE账号还是6年前注册的，这中间因为各种客观原因没有去折腾网站，电脑也换了，备份的资源都丢失了，里边应该包含ssh登录的一些信息。ssh登录Oracle Cloud Linux实例时，一直连接失败，通过oracle 后台的cloud shell切换root用户时，一直提示要输入密码，我试了有8次还是错误，实在想不起来，又怕继续尝试会被系统封号，只得作罢。必应和千问AI搜了一下，主要有如下方法： 1）分离引导卷； 2）创建定制映像； 3）重装系统（我试了几次没成功）； 4）杀龟（对VPS上没有部署任何服务的小伙伴这样最省事，大不了再开1台）。思索和尝试后，最终选择使用分离引导卷来修复ssh无法登录问题。2 分离引导卷解决思路：通过将故障实例 A 的“硬盘”挂载到另一台救援实例 B 上，直接为实例A 添加root用户名和密码，修复故障实例A本地的ssh私钥、公钥损坏或密码以往问题，添加完再把硬盘挂载回实例A。话不多说，直接上干货2.1 停止故障实例1）登录到 OCI 控制台。2）导航到 计算 (Compute) -> 实例 (Instances)。3）选择您无法 SSH 连接的故障实例。4点击顶部的 停止 (Stop) 按钮。5）等待实例状态完全变为已停止，这需要一段时间莫急。2.2 识别并分离启动盘1）在故障实例的详情页，找到 存储（Storage）-> 引导卷 (Boot Volume)。2）点击启动卷的右端 ... 打开详情界面3）记下启动卷名称（类似 ocid1.bootvolume...）。4）点击 分离 (Detach) 按钮，确认分离操作。5）等待分离操作完成，状态变为分离 (Detached)。2.3 准备救援实例需要一个能正常工作、且位于相同可用性域 (Availability Domain, AD) 的 Linux 实例作为“救援实例”。如果没有救援实例，请在与故障实例相同的 AD 中创建一个新的小型 Linux 实例。确保可以正常 SSH 连接到这个“救援实例”。我这里救援实例选择的ubuntu系统，主要是支持资料多。2.4 将故障实例启动盘附加到救援实例1）导航到故障实例的详情页。2）滚动到 存储 (Storage) -> 启动卷 (Boot volume)。3）点击故障实例启动卷：instance-xxx (Boot volume)。4）在 instance-xxx (Boot volume) 窗口中，选择Attached instance 选项，选择半虚拟化最简单，附加到救援实例，点击 附加 (Attach)，等待附加完成。3 救援实例挂载故障启动盘3.1 SSH 连接到救援实例；通过 SSH 连接到您的救援实例。注意是正常可以SSH登录的那台机器。3.2 识别故障盘通过lsblk或者 fdisk 其中之一sudo lsblk或sudo fdisk -l此时看到一个新磁盘（例如 /dev/sdb）。其系统分区通常是 /dev/sdb3。请根据您的实际输出确认正确的设备路径。3.3 创建挂载点：sudo mkdir /mnt/rescue3.4 挂载故障实例的根分区（请将 /dev/sdb3 替换为您上一步确认的正确路径）：sudo mount /dev/sdb3 /mnt/rescue3.5 查看最终挂载情况df -h显示磁盘挂载情况，如已挂载可以开展下一步工作。4 修复故障实例盘这里有两种方法，修复密码和DD救援包，我选择的时第一种方法。4.1 Chroot 到故障环境并设置密码1）使用 chroot 命令切换到故障实例的操作系统环境：sudo chroot /mnt/rescue2）设置新密码passwd root终端提示您输入并确认新密码。请设置一个您能记住的密码3）设置完成后，退出 chroot 环境exit4）卸载修复后的故障实例盘sudo umount /mnt/rescue5）完成故障实例盘的密码设置：4.2 DD救援包修复故障盘正常按4.1的方法就能完成SSH登录，有余力的可以下载DD救援包。如果自己没有备份救援包的话，这里提供2个ARM救援包和2个AMD救援包供大家使用：4.2.1 DD救援包下载1）ARM镜像Debian10 ，DD 过程应小于 12 分钟。用户名root/密码10086.fitcd /root && wget -cO debian.sdb.gz https://github.com/MIKU-N/OracleBackup/raw/main/dabian.sdb.gz?download= gzip -dc /root/debian.sdb.gz | dd of=/dev/sdb2）Ubuntu 20.04 ARM 官方原版完整救援包（恢复数据约46G，耗时约1个多小时）wget --no-check-certificate https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/Ubuntu20.04.arm.img.gz用户名:root, 密码:CNBoy.org。3）下载下方秘钥，载入SSH工具，无密码登录https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/backup4）Ubuntu 20.04 AMD 官方原版完整救援包（恢复数据约46G，耗时约1个多小时）wget --no-check-certificate https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/Ubuntu20.04.amd.img.gz用户名:root, 密码:CNBoy.org。下载下方秘钥，载入SSH工具，无密码登录https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/backup5）debian10 ARM 网络精简救援包（恢复数据约3G，耗时约10多分钟）wget --no-check-certificate https://github.com/honorcnboy/BlogDatas/releases/download/OracleRescueKit/dabian10.arm.img.gz用户名：root, 密码：10086.fit6）救砖甲骨文 AMD 执行curl -Lo- "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-nocloud-amd64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1M7）AMD如果需要 Debian 12 系统，则执行curl -Lo- "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-amd64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1M8） 救砖 甲骨文 ARM 执行curl -Lo- "https://cloud.debian.org/images/cloud/bullseye/latest/debian-11-nocloud-arm64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1M9）ARM如果需要 Debian 12 系统，则执行curl -Lo- "https://cloud.debian.org/images/cloud/bookworm/latest/debian-12-nocloud-arm64.tar.xz" | tar -xJO | dd of=/dev/sdb bs=1MDD 过程大约 25 分钟。4.2.2 恢复镜像到 /dev/sdb3 分区如果引导卷加载路径不同，请自行修改路径说明：为了防止在SSH连接在恢复数据中途中断导致失败，建议使用 srceen 后台窗口运行以下命令gzip -dc '救援包完整路径' | dd of='引导卷加载路径' 例： 使用 Ubuntu 20.04 ARM 官方原版完整救援包，命令如下： gzip -dc /root/Ubuntu20.04.arm.img.gz | dd of=/dev/sdb 使用 Ubuntu 20.04 AMD 官方原版完整救援包，命令如下： gzip -dc /root/Ubuntu20.04.amd.img.gz | dd of=/dev/sdb 使用 debian10 ARM 网络精简救援包，命令如下： gzip -dc /root/dabian10.arm.img.gz | dd of=/dev/sdb恢复过程中你可以新开一个SSH窗口，然后运行以下命令后不要关闭，切换回恢复命令的窗口查看进度watch -n 5 pkill -USR1 ^dd$5 故障实例盘物归原主5.1 卸载并分离故障实例盘1）回到 OCI 控制台 -> 救援实例详情页 -> 附加的块存储卷。2）找到附加的启动卷，点击操作菜单 (...)，选择 分离 (Detach)；3）等待分离完成；5.2将启动盘重新附加到原实例（故障实例）1）导航回到故障实例的详情页。2）找到到 存储 (Storage) -> 引导卷 (Boot Volume)。3）点击 附加 (Attach)，选择分离的启动卷。4）等待附加完成。5.3 启动故障实例在故障实例的详情页，点击启动 (Start)。6 SSH登录到修复后的故障实例等待实例运行后，可以通过SSH终端或者OCI后台的cloud shell进行操作。
本篇适合二合一系统因各种原因不想进PE修改的洗白进阶操作，需要对Linux的命令有基本的了解，如果完全不懂，建议不要按此方法操作，请看常规流程！群晖洗白所用工具请先提前下载解压缩好下载地址：https://www.ilanzou.com/s/JEEnxAU?code=8123开放SSH端口。在群晖上操作：控制面板里面——>终端机和SNMP 下，启动SSH功能。群晖启用SSH注意选高级如图勾选就行了群晖洗白引导修复所用工具下载https://www.lanzoui.com/i7823bg 用“p...查看详情SSH连接 洗白操作第一步：用ssh工具putty中文版 连接到群晖的地址，用创建群晖的管理用户登陆。打开后提示点是输入你的账号然后回车，再输入密码回车（注意SSH输入密码的时候是不会有任何字符提示的）即可登录 小提示：中文账号可能无法正常使用建议改为英文账号。登录成功后如下第二步：获取root超级权限。sudo -i回车后会提示输入密码，即再次输入当前管理账号的密码。（注意SSH输入密码的时候是不会有任何字符提示的）成功后会变成root@Sxxx:~#， 其中root开头，#结尾。第三步：在/tmp目录下创建一个临时目录，名字随意，如：bootmkdir -p /tmp/boot第四步：切换到dev目录cd /dev第五步：引导分区挂载到boot一般情况下我们直接输入下面的命令就能直接挂载mount -t vfat synoboot1 /tmp/boot/但此处输入mount -t vfat synoboot1 /tmp/boot/ 既然是进阶版本那么很大可能是针对会报错的一般报错mount: mount point /tmp/boot/ does not exist这个是意料之中，因为二合一引导引导分区是随机出现的 不一定在synoboot1所以我们要找出引导分区首先我们输入sfdisk –l 看下各个硬盘和分区 图只是演示 ，请看自己的只需要关注/dev/sd数字 sda sdb sdc ….都代表着你的一个硬盘，而后面数字代表硬盘的分区号，二合一系统的引导分区号一般为4 也就是sd4 （代表任意字母，linux下第一个硬盘为sda，如果是第二个硬盘是sdb以此类推） sd*4 就是你二合一系统的引导分区，比如我搜索到我的硬盘有sda sdb 而只有sda有sda4 分区 然后输入命令 mount -t vfat sda4 /tmp/boot/一般就能挂载成功。如果你懒得查那么直接全部一起挂载也行，下边红字部分复制贴进去就行了。反正对的就会挂载成功，有问题会直接报错也不影响。cd /devmount -t vfat sda /tmp/boot/mount -t vfat sda1 /tmp/boot/mount -t vfat sda2 /tmp/boot/mount -t vfat sda3 /tmp/boot/mount -t vfat sda4 /tmp/boot/mount -t vfat sdb /tmp/boot/mount -t vfat sdb1 /tmp/boot/mount -t vfat sdb2 /tmp/boot/mount -t vfat sdb3 /tmp/boot/mount -t vfat sdb4 /tmp/boot/mount -t vfat sdc /tmp/boot/mount -t vfat sdc1 /tmp/boot/mount -t vfat sdc2 /tmp/boot/mount -t vfat sdc3 /tmp/boot/mount -t vfat sdc4 /tmp/boot/mount -t vfat sdc4 /tmp/boot/mount -t vfat sdd /tmp/boot/mount -t vfat sdd1 /tmp/boot/mount -t vfat sdd2 /tmp/boot/mount -t vfat sdd3 /tmp/boot/mount -t vfat sdd4 /tmp/boot/mount -t vfat sde /tmp/boot/mount -t vfat sde1 /tmp/boot/mount -t vfat sde2 /tmp/boot/mount -t vfat sde3 /tmp/boot/mount -t vfat sde4 /tmp/boot/mount -t vfat sdf /tmp/boot/mount -t vfat sdf1 /tmp/boot/mount -t vfat sdf2 /tmp/boot/mount -t vfat sdf3 /tmp/boot/mount -t vfat sdf4 /tmp/boot/mount -t vfat synobios /tmp/boot/mount -t vfat synobios1 /tmp/boot/mount -t vfat synobios2 /tmp/boot/mount -t vfat sdag1 /tmp/boot/mount -t vfat sdag2 /tmp/boot/mount -t vfat md01 /tmp/boot/mount -t vfat md11 /tmp/boot/mount -t vfat md21 /tmp/boot/挂载成功后往下操作第六步：切换到/tmp/boot/目录cd /tmp/boot/可以看到挂载后有 bzImage EFI grub info.txt 等文件夹或文件（主机或版本不同时，文件夹、文件名有所差别，但肯定有grub文件夹），至此挂载成功。第七步：切换到grub目录，修改grub.cfg文件cd grubvi grub.cfg此时，进入了vim查看 grub.cfg文件。如果提示E325请往下拉看到这别急着改往下看 按方向键下 ↓ 找到如下图（注：我这里是双网卡）此时还是命令模式，按键盘上的 i 键（小写状态），进入文档编辑模式，此时就可以输入新的SN，MAC1的新值，删除旧值。单网卡可以只改mac1=后边的内容就行。如果有mac2可以按下文示例操作也可以直接把“set mac2=*” 全部删除掉。双网卡请把mac2如上替换。修改完成后，按键盘上的Esc键，返回到命令模式，输入 :wq（注：是英文状态的:wq 还有一个英文的:符号）保存并退出。如果修改乱了，想不保存并退出，则是输入 :q! 。（注：是英文状态的:q！ 还有一个英文的:符号）此时可以再 vi grub.cfg 进去看看是否修改成功。最后重启主机，输入重启命令reboot回车重启后洗白完成！！！修改注意不要搞乱格式！！！！如果出现E325 提示如下是因为多次使用vi命令打开过文件出现了交换文件，按D删除即可第八步.等待3-5分钟左右使用Synology Assistant重新搜索群晖（MAC地址改掉了IP一般都会跟着变）之前有用路由器绑定mac ip地址的也需要修改一下。软件下载地址https://www.synology.cn/zh-cn/support/download/RS3617xs+#utilities第九步.检测SN码 MAC地址是否改正确使用Synology Assistant 搜索机器 仔细核对MAC地址和SN网络物理地址对应MAC 序列号对应SN 注意仔细核对 注意字母O和数字0。————————————————https://blog.csdn.net/2301_81547508/article/details/135623088
Linux修改SSH端口，减少被恶意扫描和暴力破解，提高网站安全性
修改sshd端口在Linux系统中，sshd服务用于远程连接，默认端口为22。为了提高安全性，可以修改默认端口。以下是修改sshd端口的步骤：修改sshd配置文件首先，编辑sshd的配置文件/etc/ssh/sshd_config，找到Port配置项，将其修改为所需的端口号，例如2222：vim /etc/ssh/sshd_config将Port 22修改为Port 2222Port 2222保存并退出编辑器。配置防火墙接下来，需要在防火墙中开放新的端口。编辑防火墙配置文件/etc/sysconfig/iptables，添加以下规则：vim /etc/sysconfig/iptables添加以下规则以开放2222端口-A INPUT -p tcp --dport 2222 -j ACCEPT保存并退出编辑器，然后重启防火墙服务：service iptables restart重启sshd服务最后，重启sshd服务以使配置生效：service sshd restart现在，sshd服务将监听新的端口2222。可以通过以下命令验证：netstat -ntpl | grep sshd注意事项不要删除旧端口：如果不删除旧端口，可以同时使用旧端口和新端口进行连接防火墙配置：确保防火墙配置正确，否则可能无法通过新端口连接现有连接：重启sshd服务后，现有的连接不会断开通过以上步骤，可以有效地修改sshd端口，提高系统的安全性。
网站安全：使用 fail2ban 防御 SSH 服务器的暴力破解攻击
对于SSH服务的常见的攻击就是暴力破解攻击——远程攻击者通过不同的密码来无限次地进行登录尝试。当然SSH可以设置使用非密码验证验证方式来对抗这种攻击，例如公钥验证或者双重验证。将不同的验证方法的优劣处先放在一边，如果我们必须使用密码验证方式怎么办？你是如何保护你的 SSH 服务器免遭暴力破解攻击的呢？fail2ban 是 Linux 上的一个著名的入侵保护的开源框架，它会监控多个系统的日志文件（例如：/var/log/auth.log 或者 /var/log/secure）并根据检测到的任何可疑的行为自动触发不同的防御动作。事实上，fail2ban 在防御对SSH服务器的暴力密码破解上非常有用。在这篇指导教程中，我会演示如何安装并配置 fail2ban 来保护 SSH 服务器以避免来自远程IP地址的暴力攻击。在linux上安装Fail2ban为了在CentOS 或 RHEL上安装fail2ban,首先设置EPEL仓库，然后运行以下命令。$ sudo yum install fail2ban在Fedora上安装fail2ban，简单地运行以下命令：$ sudo yum install fail2ban在ubuntu，Debian 或 Linux Mint上安装fail2ban：$ sudo apt-get install fail2ban为SSH服务器配置Fail2ban现在你已经准备好了通过配置 fail2ban 来加强你的SSH服务器。你需要编辑其配置文件 /etc/fail2ban/jail.conf。 在配置文件的“[DEFAULT]”区，你可以在此定义所有受监控的服务的默认参数，另外在特定服务的配置部分，你可以为每个服务（例如SSH，Apache等）设置特定的配置来覆盖默认的参数配置。在针对服务的监狱区（在[DEFAULT]区后面的地方），你需要定义一个[ssh-iptables]区，这里用来定义SSH相关的监狱配置。真正的禁止IP地址的操作是通过iptables完成的。下面是一个包含“ssh-iptables”监狱配置的/etc/fail2ban/jail.conf的文件样例。当然根据你的需要，你也可以指定其他的应用监狱。$ sudo vi /etc/fail2ban/jail.local[DEFAULT]以空格分隔的列表，可以是 IP 地址、CIDR 前缀或者 DNS 主机名用于指定哪些地址可以忽略 fail2ban 防御ignoreip = 127.0.0.1 172.31.0.0/24 10.10.0.0/24 192.168.0.0/24客户端主机被禁止的时长（秒）bantime = 86400客户端主机被禁止前允许失败的次数maxretry = 5查找失败次数的时长（秒）findtime = 600mta = sendmail[ssh-iptables]enabled = truefilter = sshdaction = iptables[name=SSH, port=ssh, protocol=tcp]sendmail-whois[name=SSH, dest=your@email.com, sender=fail2ban@email.com]Debian 系的发行版logpath = /var/log/auth.logRed Hat 系的发行版logpath = /var/log/securessh 服务的最大尝试次数maxretry = 3根据上述配置，fail2ban会自动禁止在最近10分钟内有超过3次访问尝试失败的任意IP地址。一旦被禁，这个IP地址将会在24小时内一直被禁止访问 SSH 服务。这个事件也会通过sendemail发送邮件通知。一旦配置文件准备就绪，按照以下方式重启fail2ban服务。在 Debian, Ubuntu 或 CentOS/RHEL 6:$ sudo service fail2ban restart在 Fedora 或 CentOS/RHEL 7:$ sudo systemctl restart fail2ban为了验证fail2ban成功运行，使用参数'ping'来运行fail2ban-client 命令。 如果fail2ban服务正常运行，你可以看到“pong（嘭）”作为响应。$ sudo fail2ban-client pingServer replied: pong测试 fail2ban 保护SSH免遭暴力破解攻击为了测试fail2ban是否能正常工作，尝试通过使用错误的密码来用SSH连接到服务器模拟一个暴力破解攻击。与此同时，监控 /var/log/fail2ban.log，该文件记录在fail2ban中发生的任何敏感事件。$ sudo tail -f /var/log/fail2ban.log根据上述的日志文件，Fail2ban通过检测IP地址的多次失败登录尝试，禁止了一个IP地址192.168.1.8。检查fail2ban状态并解禁被锁住的IP地址由于fail2ban的“ssh-iptables”监狱使用iptables来阻塞问题IP地址，你可以通过以下方式来检测当前iptables来验证禁止规则。$ sudo iptables --list -nChain INPUT (policy ACCEPT)target prot opt source destinationfail2ban-SSH tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22Chain FORWARD (policy ACCEPT)target prot opt source destinationChain OUTPUT (policy ACCEPT)target prot opt source destinationChain fail2ban-SSH (1 references)target prot opt source destinationDROP all -- 192.168.1.8 0.0.0.0/0RETURN all -- 0.0.0.0/0 0.0.0.0/0如果你想要从fail2ban中解锁某个IP地址，你可以使用iptables命令：$ sudo iptables -D fail2ban-SSH -s 192.168.1.8 -j DROP当然你可以使用上述的iptables命令手动地检验和管理fail2ban的IP阻塞列表，但实际上有一个适当的方法就是使用fail2ban-client命令行工具。这个命令不仅允许你对"ssh-iptables"监狱进行管理，同时也是一个标准的命令行接口，可以管理其他类型的fail2ban监狱。为了检验fail2ban状态（会显示出当前活动的监狱列表）：$ sudo fail2ban-client status为了检验一个特定监狱的状态（例如ssh-iptables):$ sudo fail2ban-client status ssh-iptables上面的命令会显示出被禁止IP地址列表。为了解锁特定的IP地址：$ sudo fail2ban-client set ssh-iptables unbanip 192.168.1.8注意，如果你停止了Fail2ban 服务，那么所有的IP地址都会被解锁。当你重启 Fail2ban，它会从/etc/log/secure(或 /var/log/auth.log)中找到异常的IP地址列表，如果这些异常地址的发生时间仍然在禁止时间内，那么Fail2ban会重新将这些IP地址禁止。设置 Fail2ban 自动启动一旦你成功地测试了fail2ban之后，最后一个步骤就是在你的服务器上让其在开机时自动启动。在基于Debian的发行版中，fail2ban已经默认让自动启动生效。在基于Red-Hat的发行版中，按照下面的方式让自动启动生效。在 CentOS/RHEL 6中:$ sudo chkconfig fail2ban on在 Fedora 或 CentOS/RHEL 7:$ sudo systemctl enable fail2ban总结在该教程中，我演示了如何安装并配置fail2ban来保护一个SSH服务器。当然fail2ban可以缓解暴力密码攻击，但是请注意，这并不能保护SSH服务器避免来自复杂的分布式暴力破解组织，这些攻击者通过使用成千上万个机器控制的IP地址来绕过fail2ban的防御机制。
提高网站安全性：修改SSH端口号，避免被暴力破解
相信很多站长朋友都有这样的经历，每次登录SSH的时候都是一堆失败登录，全都是暴力破解的，非常头疼。本文就来教大家如何简单修改SSH端口号，减少被暴力破解风险。WARNING! The remote SSH server rejected X11 forwarding request. Last failed login: Thu Apr 22 22:28:02 CST 2021 from 116.5.168.215 on ssh:notty There were 163897 failed login attempts since the last successful login. Last login: Thu Apr 1 00:22:11 2021 from 14.127.75.38 1.登录SSH。2.编辑SSH配置文件：vi /etc/ssh/sshd_config在#Port 22行去掉#号注释，同时加入想要使用的端口号如 Port 61347 还有一种方法就是不删除22端口号直接增加新端口号，可以直接用下面的命令：echo 'Port 61347' > /etc/ssh/sshd_config && reboot 3.重启SSH服务 service sshd restart4.整个世界终于清净了。