{"id":3520,"date":"2026-11-03T19:02:08","date_gmt":"2026-11-03T19:02:08","guid":{"rendered":"https:\/\/sreschool.com\/blog\/?p=3520"},"modified":"2026-11-03T19:02:10","modified_gmt":"2026-11-03T19:02:10","slug":"godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix","status":"publish","type":"post","link":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/","title":{"rendered":"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &#038; Permanent Fix"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\"><strong>Case study:<\/strong>&nbsp;VPS&nbsp;<code>184.168.122.73<\/code>&nbsp;\u2022 Host&nbsp;<code>ip-184-168-122-73<\/code>&nbsp;\u2022 Login user&nbsp;<code>dsbokteam<\/code>&nbsp;\u2022 Recovery work performed as&nbsp;<code>root<\/code>&nbsp;\u2022 Incident observed 3 November 2026 (server UTC).<br><strong>Audience:<\/strong>&nbsp;Linux administrators managing GoDaddy VPS servers and other Ubuntu servers.<br><strong>Result:<\/strong>&nbsp;<code>ssh.service<\/code>&nbsp;successfully became&nbsp;<code>active (running)<\/code>&nbsp;and&nbsp;<code>enabled<\/code>&nbsp;under systemd. A controlled post-reboot check later showed&nbsp;<code>active<\/code>&nbsp;\/&nbsp;<code>enabled<\/code>, but the transcript does not explicitly establish whether a reboot occurred immediately before that check.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Scope and evidence:<\/strong>&nbsp;The SSH incident, exact errors, investigated services, and final working commands are reconstructed from the supplied console logs. The original 20.04 \u2192 22.04 upgrade command transcript was not supplied; the&nbsp;<em>pre-upgrade and release-upgrade procedure<\/em>&nbsp;below is a recommended repeatable workflow,&nbsp;<strong>not a claim about commands executed in this incident<\/strong>. Do not run an upgrade again on a server already on 22.04.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">1. Executive summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The Ubuntu upgrade was followed by a loss of remote SSH access:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SSH Connecting to 184.168.122.73\nConnection refused (os error 61)\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Initially no process listened on TCP port 22. A manual attempt to check the SSH configuration reported:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Missing privilege separation directory: \/run\/sshd\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Creating&nbsp;<code>\/run\/sshd<\/code>&nbsp;and launching&nbsp;<code>\/usr\/sbin\/sshd<\/code>&nbsp;restored temporary access but not automatic startup.&nbsp;<code>ssh.service<\/code>&nbsp;was enabled but&nbsp;<code>inactive<\/code>;&nbsp;<code>systemctl start ssh.service<\/code>&nbsp;hung and timed out with code&nbsp;<code>124<\/code>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The underlying culprit was a&nbsp;<strong>custom<\/strong>&nbsp;<code>\/etc\/systemd\/system\/sshd-host-keys.service<\/code>&nbsp;with&nbsp;<code>Before=ssh.service<\/code>&nbsp;that executed&nbsp;<code>dpkg-reconfigure --frontend=noninteractive openssh-server<\/code>. The package&#8217;s post-installation script tried to&nbsp;<code>systemctl restart ssh.service<\/code>, which was still waiting for the custom service to finish: a circular wait. After the custom service was disabled and its stuck job cleared, another problem appeared: the manually launched&nbsp;<code>sshd<\/code>&nbsp;occupied port 22, causing systemd&#8217;s&nbsp;<code>sshd<\/code>&nbsp;to fail with&nbsp;<code>Address already in use<\/code>. The manual listener was stopped safely, and systemd started the managed daemon successfully.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2. Environment and recovery prerequisites<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Field<\/th><th class=\"has-text-align-left\" data-align=\"left\">Incident value<\/th><\/tr><\/thead><tbody><tr><td>Provider<\/td><td>GoDaddy VPS Hosting<\/td><\/tr><tr><td>Public IP<\/td><td><code>184.168.122.73<\/code><\/td><\/tr><tr><td>OS change<\/td><td>Ubuntu 20.04 LTS \u2192 Ubuntu 22.04 LTS<\/td><\/tr><tr><td>Normal SSH user<\/td><td><code>dsbokteam<\/code><\/td><\/tr><tr><td>Privileged shell<\/td><td><code>sudo -s<\/code>&nbsp;to&nbsp;<code>root<\/code><\/td><\/tr><tr><td>Systemd SSH unit<\/td><td><code>ssh.service<\/code><\/td><\/tr><tr><td>Problematic extra unit<\/td><td><code>\/etc\/systemd\/system\/sshd-host-keys.service<\/code><\/td><\/tr><tr><td>SSH port<\/td><td>TCP&nbsp;<code>22<\/code><\/td><\/tr><tr><td>Working managed SSH PID in final incident log<\/td><td><code>7275<\/code>&nbsp;(will change after restart)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Safety prerequisites before changing remote access:<\/strong>&nbsp;Maintain an independent GoDaddy Recovery Console session; verify the VPS has a current restore point\/backup; do not remove SSH host keys; do not flush firewalls; do not reboot while SSH cannot start under systemd. A shell over SSH is not a substitute for out-of-band recovery access.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">GoDaddy Recovery Console versus Rescue Mode<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Sign in to GoDaddy \u2192\u00a0<strong>My Products \/ Servers<\/strong>\u00a0\u2192\u00a0<strong>Manage<\/strong>\u00a0the VPS.<\/li>\n\n\n\n<li>Choose\u00a0<strong>Server Actions \u2192 Recovery Console<\/strong>.<\/li>\n\n\n\n<li>Log in with a valid\u00a0<strong>Linux server account and password<\/strong>\u00a0(not the GoDaddy web-account password). The working user in this incident was\u00a0<code>dsbokteam<\/code>\u00a0and the root shell was obtained with\u00a0<code>sudo -s<\/code>.<\/li>\n\n\n\n<li><strong>Rescue Mode<\/strong>\u00a0is different: it boots into a rescue environment and GoDaddy provides temporary credentials. Use only if normal boot\/console recovery is insufficient; it interrupts hosted services.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Provider references:&nbsp;<a href=\"https:\/\/www.godaddy.com\/en\/help\/use-the-recovery-console-for-vps-hosting-32064\">https:\/\/www.godaddy.com\/en\/help\/use-the-recovery-console-for-vps-hosting-32064<\/a>&nbsp;and&nbsp;<a href=\"https:\/\/www.godaddy.com\/en\/help\/boot-my-vps-hosting-in-rescue-mode-32175\">https:\/\/www.godaddy.com\/en\/help\/boot-my-vps-hosting-in-rescue-mode-32175<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3. Recommended pre-upgrade checklist (reference procedure; not verified incident history)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Do this&nbsp;<strong>before<\/strong>&nbsp;a future Ubuntu release upgrade, in a scheduled maintenance window.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Record current OS, kernel, system state and disk availability.<\/em>\ncat \/etc\/os-release\nuname -a\ndf -h\nfree -h\nsystemctl --failed --no-pager\nss -tlnp\n\n<em># Inspect custom services and SSH startup configuration.<\/em>\nsystemctl cat ssh.service\nsystemctl list-unit-files '*ssh*'\nls -la \/etc\/systemd\/system\/*ssh* 2&gt;\/dev\/null\nsudo \/usr\/sbin\/sshd -t\n\n<em># Record installed packages and important configuration.<\/em>\nsudo install -d -m 0700 \/root\/pre-upgrade-records\nsudo dpkg-query -W &gt; \/root\/pre-upgrade-records\/packages.txt\nsudo cp -a \/etc\/ssh \/root\/pre-upgrade-records\/ssh-config-backup\nsudo cp -a \/etc\/apt \/root\/pre-upgrade-records\/apt-config-backup\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Security:<\/strong>&nbsp;<code>\/etc\/ssh<\/code>&nbsp;may contain private host keys. Keep that backup restricted to root, preferably encrypted\/off-server, and do not publish it. In addition, take a provider snapshot or separately verified full backup of application data, databases, configurations and volumes. Verify recovery access&nbsp;<em>before<\/em>&nbsp;changing the OS.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Update the current Ubuntu release fully and install the official upgrader (run only while still on the&nbsp;<strong>old<\/strong>&nbsp;release):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo apt update\nsudo apt dist-upgrade -o APT::Get::Always-Include-Phased-Updates=true\nsudo apt install update-manager-core\nsudo grep '^Prompt=' \/etc\/update-manager\/release-upgrades\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">For LTS-to-LTS upgrades,&nbsp;<code>Prompt=lts<\/code>&nbsp;is appropriate. Read package prompts carefully, especially if&nbsp;<code>\/etc\/ssh\/sshd_config<\/code>&nbsp;or third-party repositories have local customizations. Do&nbsp;<strong>not<\/strong>&nbsp;blindly overwrite an existing SSH configuration.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">4. Recommended Ubuntu 20.04 \u2192 22.04 upgrade procedure (reference only)<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The official server upgrade mechanism is:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo do-release-upgrade\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Run only on the pre-upgrade server with backups and recovery access ready. Read the proposed package removals\/replacements before proceeding. Ubuntu&#8217;s release upgrader handles configuration questions interactively and typically runs in a recoverable GNU screen session for remote upgrades. Do not use&nbsp;<code>-d<\/code>&nbsp;for a routine production LTS upgrade.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At the end of a successful upgrade, a reboot is normally required. The release upgrade is not complete until that reboot. See Ubuntu&#8217;s official instructions:&nbsp;<a href=\"https:\/\/ubuntu.com\/server\/docs\/how-to\/software\/upgrade-your-release\/\">https:\/\/ubuntu.com\/server\/docs\/how-to\/software\/upgrade-your-release\/<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Before rebooting, check for unexpected custom units such as&nbsp;<code>sshd-host-keys.service<\/code>.<\/strong>&nbsp;On this VPS it was a custom service outside Ubuntu&#8217;s regular&nbsp;<code>ssh.service<\/code>&nbsp;implementation and blocked boot-time startup.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">5. Incident chronology: actual observed errors and meaning<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Stage<\/th><th class=\"has-text-align-left\" data-align=\"left\">Exact observation<\/th><th class=\"has-text-align-left\" data-align=\"left\">Technical meaning<\/th><\/tr><\/thead><tbody><tr><td>SSH unavailable<\/td><td><code>Connection refused (os error 61)<\/code><\/td><td>TCP connection refused before authentication; not a bad password<\/td><\/tr><tr><td>Listener check<\/td><td>`ss -tlnp<\/td><td>grep &#8216;:22&#8217;` returned nothing<\/td><\/tr><tr><td>SSH validation<\/td><td><code>Missing privilege separation directory: \/run\/sshd<\/code><\/td><td>Required runtime directory was absent<\/td><\/tr><tr><td>Manual fallback<\/td><td><code>\/usr\/sbin\/sshd<\/code>&nbsp;worked<\/td><td>SSH binary could run outside systemd<\/td><\/tr><tr><td>Enable status<\/td><td><code>enabled<\/code>&nbsp;\/&nbsp;<code>inactive<\/code><\/td><td>Configured for boot but not actually running as a managed service<\/td><\/tr><tr><td>Managed startup<\/td><td><code>timeout 20s systemctl start ssh.service<\/code>&nbsp;\u2192&nbsp;<code>Exit code: 124<\/code><\/td><td>Startup waited beyond 20 seconds<\/td><\/tr><tr><td>Systemd queue<\/td><td><code>sshd-host-keys.service start running<\/code>&nbsp;and&nbsp;<code>ssh.service start waiting<\/code><\/td><td>An earlier ordering\/dependency blocker was active<\/td><\/tr><tr><td>Custom unit<\/td><td><code>Before=ssh.service<\/code>;&nbsp;<code>ExecStart=dpkg-reconfigure --frontend=noninteractive openssh-server<\/code><\/td><td>Custom host-key job reconfigured the package at boot<\/td><\/tr><tr><td>Reconfiguration child<\/td><td><code>deb-systemd-invoke restart rescue-ssh.target ssh.service<\/code><\/td><td>Host-key job tried to restart the service it preceded<\/td><\/tr><tr><td>After unblocking<\/td><td><code>Bind to port 22 ... Address already in use<\/code>;&nbsp;<code>fatal: Cannot bind any address.<\/code><\/td><td>Manual&nbsp;<code>sshd<\/code>&nbsp;had become the remaining port conflict<\/td><\/tr><tr><td>Final result<\/td><td><code>ssh.service: active (running)<\/code>,&nbsp;<code>enabled<\/code>, systemd-managed PID 7275<\/td><td>Managed SSH startup succeeded<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">Root cause: ordering and restart deadlock<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>systemd starts sshd-host-keys.service\n        |\n        v\nExecStart: dpkg-reconfigure openssh-server\n        |\n        v\nopenssh-server.postinst calls systemctl restart ssh.service\n        |\n        v\nssh.service is WAITING for sshd-host-keys.service\n        |\n        +------ circular wait \/ stalled boot transaction ------+\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The file&nbsp;<code>\/etc\/systemd\/system\/sshd-host-keys.service<\/code>&nbsp;contained:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Unit]\nDescription=Generates ssh host keys at boot time\nDocumentation=man:sshd(5)\nBefore=ssh.service\n\n&#91;Service]\nType=oneshot\nRemainAfterExit=yes\nUser=root\nExecStart=dpkg-reconfigure --frontend=noninteractive openssh-server\n\n&#91;Install]\nWantedBy=multi-user.target\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This unit should not be assumed to exist on every Ubuntu server; it was&nbsp;<strong>specific to this VPS<\/strong>. In the incident, SSH host keys already existed (<code>\/etc\/ssh\/ssh_host_rsa_key<\/code>,&nbsp;<code>ssh_host_ecdsa_key<\/code>,&nbsp;<code>ssh_host_ed25519_key<\/code>). No regeneration was necessary.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">6. First temporary recovery: repair&nbsp;<code>\/run\/sshd<\/code><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">From GoDaddy Recovery Console, authenticate as the Linux user and get root privileges:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo -s\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Investigate the server:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/etc\/os-release\nps -p 1 -o pid,comm,args\nps aux | grep '&#91;s]shd'\nss -tlnp | grep ':22'\ndpkg -l openssh-server\n\/usr\/sbin\/sshd -t\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">When&nbsp;<code>sshd -t<\/code>&nbsp;reports a missing runtime directory:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>install -d -m 0755 -o root -g root \/run\/sshd\n\/usr\/sbin\/sshd -t\necho $?\n<em># Expected: 0<\/em>\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The&nbsp;<em>temporary<\/em>&nbsp;emergency workaround that succeeded was:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/usr\/sbin\/sshd\nss -tlnp | grep ':22'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>This is not a permanent boot fix.<\/strong>&nbsp;<code>\/usr\/sbin\/sshd<\/code>&nbsp;starts a daemon without making systemd own the process. Once systemd tries to start its own instance, the manually created listener can conflict on port 22.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">7. Investigate systemd rather than repeating a hanging command<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Show the service without letting output enter a pager.<\/em>\nsystemctl status ssh.service --no-pager -l\nsystemctl is-enabled ssh.service\nsystemctl is-active ssh.service\n\n<em># Bound startup attempts so the console does not hang indefinitely.<\/em>\ntimeout 20s systemctl start ssh.service\necho \"Exit code: $?\"\n\n<em># Identify the queued job or dependency.<\/em>\nsystemctl list-jobs --no-pager\njournalctl -u ssh.service -b -n 50 --no-pager\nsystemctl cat ssh.service\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">A&nbsp;<code>timeout<\/code>&nbsp;exit code of&nbsp;<code>124<\/code>&nbsp;means the command timed out; it does&nbsp;<strong>not<\/strong>&nbsp;by itself prove&nbsp;<code>sshd<\/code>&nbsp;has a corrupt configuration. In this case,&nbsp;<code>systemctl list-jobs<\/code>&nbsp;exposed the real blocker:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>183 sshd-host-keys.service             start running\n120 ssh.service                       start waiting\n175 systemd-update-utmp-runlevel.service start waiting\n2   multi-user.target                 start waiting\n1   graphical.target                  start waiting\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Inspect that specific unit:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl status sshd-host-keys.service --no-pager -l\nsystemctl cat sshd-host-keys.service\njournalctl -u sshd-host-keys.service -b -n 50 --no-pager\nps -ef | grep -E 'dpkg-reconfigure|openssh-server.postinst|systemctl.*ssh'\nls -l \/etc\/ssh\/ssh_host_*_key\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The process tree showed&nbsp;<code>dpkg-reconfigure<\/code>,&nbsp;<code>openssh-server.postinst<\/code>,&nbsp;<code>deb-systemd-invoke restart ... ssh.service<\/code>&nbsp;and&nbsp;<code>systemctl ... restart ssh.service<\/code>. That confirmed the startup cycle.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">8. Permanent repair, part A: remove the harmful boot-time dependency<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Apply this only to the confirmed custom unit above, not to Ubuntu&#8217;s normal&nbsp;<code>ssh.service<\/code>.<\/strong>&nbsp;Keep GoDaddy Recovery Console open.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Prevent the custom unit from being started during future boots.<\/em>\nsystemctl disable sshd-host-keys.service\n\n<em># Inspect the active job, if any, before stopping it.<\/em>\nsystemctl status sshd-host-keys.service --no-pager -l\nsystemctl list-jobs --no-pager\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">In this incident the custom unit was stuck inside its own package reconfiguration. The recovery procedure was to stop that&nbsp;<em>specific<\/em>&nbsp;custom unit and, if it remained stuck, terminate only the processes in its cgroup:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># If stuck, terminate only the custom service's child processes.<\/em>\nsystemctl kill --kill-who=all --signal=SIGTERM sshd-host-keys.service\nsystemctl stop sshd-host-keys.service\nsystemctl daemon-reload\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Do not forcibly kill unrelated package upgrades. Confirm package manager jobs are not actively performing a different upgrade before intervening. If&nbsp;<code>systemctl stop<\/code>&nbsp;hangs, inspect jobs again; preserve the console connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Check the result:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl is-enabled sshd-host-keys.service\n<em># Observed final result: disabled<\/em>\nsystemctl list-jobs --no-pager\n<em># Observed final result: No jobs running.<\/em>\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Optional:<\/strong>&nbsp;If the unit repeatedly gets reactivated by another component, investigate that dependency.&nbsp;<code>systemctl mask sshd-host-keys.service<\/code>&nbsp;can prevent starts, but was&nbsp;<strong>not required<\/strong>&nbsp;for the successful final state recorded here. Be cautious with provider-customized units and document any local changes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">9. Permanent repair, part B: move SSH from a manual process to systemd<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Once the dependency cycle was cleared, the managed start failed with:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>error: Bind to port 22 on 0.0.0.0 failed: Address already in use.\nerror: Bind to port 22 on :: failed: Address already in use.\nfatal: Cannot bind any address.\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This was because the manually started SSH listener owned TCP port 22. A later check also showed&nbsp;<code>\/run\/sshd<\/code>&nbsp;missing again. That can happen because&nbsp;<code>ssh.service<\/code>&nbsp;declares&nbsp;<code>RuntimeDirectory=sshd<\/code>&nbsp;and systemd ordinarily removes the runtime directory when the service stops; it is not proof that the filesystem is corrupted.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Exact working recovery sequence (run from independent GoDaddy console):<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># 1. Recreate the runtime directory and validate configuration.<\/em>\ninstall -d -m 0755 -o root -g root \/run\/sshd\n\/usr\/sbin\/sshd -t\necho $?\n<em># Observed: 0<\/em>\n\n<em># 2. Verify the custom job is disabled and no queued jobs remain.<\/em>\nsystemctl is-enabled sshd-host-keys.service\nsystemctl list-jobs --no-pager\n<em># Observed: disabled; No jobs running.<\/em>\n\n<em># 3. Identify the *current* listener. Do not assume an old PID is still valid.<\/em>\nss -tlnp | grep ':22'\nps -p 6534 -o pid,ppid,args\n<em># In the incident, PID 6534 was the standalone sshd listener.<\/em>\n\n<em># 4. Terminate ONLY the verified standalone listener, from Recovery Console.<\/em>\nkill -TERM 6534\n\n<em># 5. Clear systemd's earlier failed state and start managed SSH.<\/em>\nsystemctl reset-failed ssh.service\ntimeout 20s systemctl start ssh.service\necho \"Exit code: $?\"\n<em># Observed: Exit code: 0<\/em>\n\n<em># 6. Verify startup and boot enablement.<\/em>\nsystemctl status ssh.service --no-pager -l\nsystemctl is-enabled ssh.service\nsystemctl is-active ssh.service\n<em># Observed: enabled; active<\/em>\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Important:<\/strong>&nbsp;<code>6534<\/code>&nbsp;was a real incident PID, not a reusable constant. For a different server or later boot, discover and verify the current listener before sending a signal. If your only access is SSH, do&nbsp;<strong>not<\/strong>&nbsp;kill its listener without an independent Recovery Console session. The final managed SSH process was PID&nbsp;<code>7275<\/code>&nbsp;and logged:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Started OpenBSD Secure Shell server.\nServer listening on 0.0.0.0 port 22.\nServer listening on :: port 22.\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">10. Why&nbsp;<code>\/run\/sshd<\/code>&nbsp;vanished and how it is managed at boot<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ubuntu&#8217;s&nbsp;<code>ssh.service<\/code>&nbsp;unit on this VPS includes:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ExecStartPre=\/usr\/sbin\/sshd -t\nExecStart=\/usr\/sbin\/sshd -D $SSHD_OPTS\nType=notify\nRuntimeDirectory=sshd\nRuntimeDirectoryMode=0755\nRestart=on-failure\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Normal behavior:<\/strong>&nbsp;When systemd starts&nbsp;<code>ssh.service<\/code>, it creates&nbsp;<code>\/run\/sshd<\/code>. When that service stops, systemd may remove the directory. The directory is temporary and should not be made persistent by storing it under a different filesystem.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During troubleshooting, this additional tmpfiles rule was created:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat &gt; \/etc\/tmpfiles.d\/sshd.conf &lt;&lt;'RULE'\nd \/run\/sshd 0755 root root -\nRULE\nsystemd-tmpfiles --create \/etc\/tmpfiles.d\/sshd.conf\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">This is a permissible additional boot-time safeguard,&nbsp;<strong>but not the main fix<\/strong>: correct&nbsp;<code>ssh.service<\/code>&nbsp;startup already creates&nbsp;<code>\/run\/sshd<\/code>&nbsp;automatically. The main fix was clearing the custom service deadlock and moving SSH under systemd management.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Reference:&nbsp;<a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/256\/systemd.exec.html\">https:\/\/www.freedesktop.org\/software\/systemd\/man\/256\/systemd.exec.html<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">11. Final validation and controlled reboot<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before rebooting, verify all of these:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Should show active \/ enabled.<\/em>\nsystemctl is-active ssh.service\nsystemctl is-enabled ssh.service\n\n<em># Should show disabled (or masked if deliberately masked).<\/em>\nsystemctl is-enabled sshd-host-keys.service\n\n<em># Should show no blocked jobs.<\/em>\nsystemctl list-jobs --no-pager\n\n<em># Should show the managed daemon listening on 22.<\/em>\nsystemctl show ssh.service -p ActiveState -p SubState -p MainPID -p RuntimeDirectory\nss -tlnp | grep ':22'\n\n<em># Should validate cleanly.<\/em>\n\/usr\/sbin\/sshd -t\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Additional overall checks:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl --failed --no-pager\ndpkg --audit\ndf -h\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">From a&nbsp;<strong>new terminal on your Mac<\/strong>&nbsp;(use your established SSH authentication method):<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh dsbokteam@184.168.122.73\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Only after a&nbsp;<strong>fresh connection succeeds<\/strong>, your backup\/recovery console is available, and&nbsp;<code>ssh.service<\/code>&nbsp;is active\/enabled, conduct a controlled reboot during a maintenance window:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo reboot\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">After the server returns:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl is-active ssh\nsystemctl is-enabled ssh\nsystemctl is-enabled sshd-host-keys.service\nsystemctl list-jobs --no-pager\nss -tlnp | grep ':22'\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Observed at end of user log:<\/strong>&nbsp;<code>systemctl is-active ssh<\/code>&nbsp;\u2192&nbsp;<code>active<\/code>;&nbsp;<code>systemctl is-enabled ssh<\/code>&nbsp;\u2192&nbsp;<code>enabled<\/code>. The log does not explicitly say whether this check followed a reboot, so do not treat reboot persistence as independently proved until you verify it after a known reboot.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">12. Additional upgrade health checks and only-if-needed repairs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">After a major OS upgrade, assess applications independently from SSH:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cat \/etc\/os-release\nuname -r\nsudo systemctl --failed --no-pager\nsudo dpkg --audit\nsudo journalctl -b -p err --no-pager -n 100\nsudo ss -tlnp\nsudo df -h\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Check only services actually installed on the server, for example&nbsp;<code>nginx<\/code>,&nbsp;<code>apache2<\/code>,&nbsp;<code>mysql<\/code>,&nbsp;<code>mariadb<\/code>,&nbsp;<code>php*-fpm<\/code>, firewalls, or monitoring agents. Third-party repositories may have been disabled during the distribution upgrade; inspect them before re-enabling compatibility-sensitive packages.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If&nbsp;<code>dpkg --audit<\/code>&nbsp;reports half-configured packages&nbsp;<strong>and no other apt\/dpkg\/release-upgrader job is running<\/strong>, the general Ubuntu repair tools are:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sudo dpkg --configure -a\nsudo apt --fix-broken install\n<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>However:<\/strong>&nbsp;Because&nbsp;<code>openssh-server<\/code>&nbsp;reconfiguration specifically triggered the deadlock in this case, do not run those package-repair commands blindly while a problematic&nbsp;<code>sshd-host-keys.service<\/code>&nbsp;is still running or while SSH recovery is incomplete. Inspect any proposed changes and keep the Recovery Console available.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Troubleshooting matrix<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-left\" data-align=\"left\">Symptom<\/th><th class=\"has-text-align-left\" data-align=\"left\">Check<\/th><th class=\"has-text-align-left\" data-align=\"left\">Correct response<\/th><\/tr><\/thead><tbody><tr><td>SSH&nbsp;<code>Connection refused<\/code><\/td><td><code>ss -tlnp | grep ':22'<\/code><\/td><td>Check service\/listener and port, not password first<\/td><\/tr><tr><td><code>sshd -t<\/code>&nbsp;says missing&nbsp;<code>\/run\/sshd<\/code><\/td><td><code>ls -ld \/run\/sshd<\/code><\/td><td><code>install -d -m 0755 -o root -g root \/run\/sshd<\/code>; then&nbsp;<code>sshd -t<\/code><\/td><\/tr><tr><td><code>systemctl start ssh<\/code>&nbsp;hangs<\/td><td><code>systemctl list-jobs<\/code><\/td><td>Find waiting unit; inspect custom dependencies<\/td><\/tr><tr><td><code>ssh.service<\/code>&nbsp;enabled but inactive<\/td><td><code>systemctl status ssh<\/code><\/td><td>Enabled is only boot configuration; fix startup and retest<\/td><\/tr><tr><td><code>sshd-host-keys.service<\/code>&nbsp;stuck<\/td><td><code>systemctl cat<\/code>&nbsp;and&nbsp;<code>status<\/code><\/td><td>Identify&nbsp;<code>dpkg-reconfigure<\/code>&nbsp;\/ recursive SSH restart; disable confirmed custom unit<\/td><\/tr><tr><td><code>Address already in use<\/code>&nbsp;on port 22<\/td><td><code>ss -tlnp | grep ':22'<\/code><\/td><td>Transition from verified standalone listener to systemd with out-of-band access<\/td><\/tr><tr><td><code>ssh.service<\/code>&nbsp;failed after a former error<\/td><td><code>journalctl -u ssh -b<\/code><\/td><td>Fix root problem,&nbsp;<code>systemctl reset-failed ssh<\/code>, then start<\/td><\/tr><tr><td>Service fails after reboot<\/td><td>Recovery Console;&nbsp;<code>systemctl list-jobs<\/code><\/td><td>Reinspect custom services, unit conditions and logs<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">13. Minimum command checklist for future SSH recovery<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code><em># Diagnostic: run through GoDaddy console as root.<\/em>\ncat \/etc\/os-release\n\/usr\/sbin\/sshd -t\nss -tlnp | grep ':22'\nsystemctl status ssh --no-pager -l\nsystemctl list-jobs --no-pager\njournalctl -u ssh -b -n 50 --no-pager\n\n<em># Only when \/run\/sshd is missing:<\/em>\ninstall -d -m 0755 -o root -g root \/run\/sshd\n\/usr\/sbin\/sshd -t\n\n<em># Check for this VPS-specific deadlock, do not assume it elsewhere:<\/em>\nsystemctl status sshd-host-keys.service --no-pager -l\nsystemctl cat sshd-host-keys.service\n\n<em># Once the blocker and any standalone port-22 conflict have been fixed:<\/em>\nsystemctl reset-failed ssh.service\nsystemctl enable ssh.service\nsystemctl start ssh.service\nsystemctl is-active ssh.service\nsystemctl is-enabled ssh.service\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">14. Final lessons learned<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong><code>Connection refused<\/code>\u00a0means the TCP service is unavailable, not that the password is incorrect.<\/strong><\/li>\n\n\n\n<li><strong><code>enabled<\/code>\u00a0is not the same as\u00a0<code>active<\/code>.<\/strong>\u00a0The SSH service must be both.<\/li>\n\n\n\n<li><strong>Always inspect queued systemd jobs when\u00a0<code>systemctl start<\/code>\u00a0hangs.<\/strong>\u00a0The hidden blocker here was a custom boot-time host-key unit.<\/li>\n\n\n\n<li><strong>Avoid\u00a0<code>dpkg-reconfigure openssh-server<\/code>\u00a0as a routine boot-time precondition for starting SSH.<\/strong>\u00a0It can invoke package scripts that restart SSH and create a dependency deadlock.<\/li>\n\n\n\n<li><strong>Do not regenerate existing SSH host keys unless there is a specific reason.<\/strong>\u00a0Changing them unnecessarily breaks established host identities.<\/li>\n\n\n\n<li><strong><code>\/usr\/sbin\/sshd<\/code>\u00a0is an emergency workaround, not the managed final state.<\/strong>\u00a0A manual daemon may occupy port 22 and block systemd&#8217;s instance.<\/li>\n\n\n\n<li><strong><code>\/run\/sshd<\/code>\u00a0is a runtime directory.<\/strong>\u00a0<code>RuntimeDirectory=sshd<\/code>\u00a0in a healthy systemd service is the primary way to create it.<\/li>\n\n\n\n<li><strong>Use GoDaddy Recovery Console as the safety net<\/strong>\u00a0before killing the SSH listener or rebooting.<\/li>\n\n\n\n<li><strong>Verify a new remote SSH login and a known post-reboot\u00a0<code>active<\/code>\/<code>enabled<\/code>\u00a0state<\/strong>\u00a0before declaring full reboot persistence.<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">Sources and provenance<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Actual incident:<\/strong>\u00a0User-provided GoDaddy VPS shell output and console transcripts from 3 November 2026; includes custom unit, process tree, SSH errors, exact final commands and results.<\/li>\n\n\n\n<li><strong>Official Ubuntu upgrade guide:<\/strong>\u00a0<a href=\"https:\/\/ubuntu.com\/server\/docs\/how-to\/software\/upgrade-your-release\/\">https:\/\/ubuntu.com\/server\/docs\/how-to\/software\/upgrade-your-release\/<\/a><\/li>\n\n\n\n<li><strong>Official GoDaddy Recovery Console:<\/strong>\u00a0<a href=\"https:\/\/www.godaddy.com\/en\/help\/use-the-recovery-console-for-vps-hosting-32064\">https:\/\/www.godaddy.com\/en\/help\/use-the-recovery-console-for-vps-hosting-32064<\/a><\/li>\n\n\n\n<li><strong>Official GoDaddy Rescue Mode:<\/strong>\u00a0<a href=\"https:\/\/www.godaddy.com\/en\/help\/boot-my-vps-hosting-in-rescue-mode-32175\">https:\/\/www.godaddy.com\/en\/help\/boot-my-vps-hosting-in-rescue-mode-32175<\/a><\/li>\n\n\n\n<li><strong>systemd runtime directory documentation:<\/strong>\u00a0<a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/256\/systemd.exec.html\">https:\/\/www.freedesktop.org\/software\/systemd\/man\/256\/systemd.exec.html<\/a><\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Case study:&nbsp;VPS&nbsp;184.168.122.73&nbsp;\u2022 Host&nbsp;ip-184-168-122-73&nbsp;\u2022 Login user&nbsp;dsbokteam&nbsp;\u2022 Recovery work performed as&nbsp;root&nbsp;\u2022 Incident observed 3 November 2026 (server UTC).Audience:&nbsp;Linux administrators managing GoDaddy VPS [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-3520","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &amp; Permanent Fix - SRE School<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-\u2192-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &amp; Permanent Fix - SRE School\" \/>\n<meta property=\"og:description\" content=\"Case study:&nbsp;VPS&nbsp;184.168.122.73&nbsp;\u2022 Host&nbsp;ip-184-168-122-73&nbsp;\u2022 Login user&nbsp;dsbokteam&nbsp;\u2022 Recovery work performed as&nbsp;root&nbsp;\u2022 Incident observed 3 November 2026 (server UTC).Audience:&nbsp;Linux administrators managing GoDaddy VPS [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-\u2192-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/\" \/>\n<meta property=\"og:site_name\" content=\"SRE School\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-03T19:02:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-03T19:02:10+00:00\" \/>\n<meta name=\"author\" content=\"Rajesh Kumar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Rajesh Kumar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/\"},\"author\":{\"name\":\"Rajesh Kumar\",\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/#\\\/schema\\\/person\\\/0ffe446f77bb2589992dbe3a7f417201\"},\"headline\":\"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &#038; Permanent Fix\",\"datePublished\":\"2026-11-03T19:02:08+00:00\",\"dateModified\":\"2026-11-03T19:02:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/\"},\"wordCount\":1989,\"commentCount\":0,\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/\",\"url\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/\",\"name\":\"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis & Permanent Fix - SRE School\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-11-03T19:02:08+00:00\",\"dateModified\":\"2026-11-03T19:02:10+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/#\\\/schema\\\/person\\\/0ffe446f77bb2589992dbe3a7f417201\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/#breadcrumb\"},\"inLanguage\":\"en\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &#038; Permanent Fix\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/\",\"name\":\"SRESchool\",\"description\":\"Master SRE. Build Resilient Systems. Lead the Future of Reliability\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/#\\\/schema\\\/person\\\/0ffe446f77bb2589992dbe3a7f417201\",\"name\":\"Rajesh Kumar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g\",\"caption\":\"Rajesh Kumar\"},\"sameAs\":[\"http:\\\/\\\/sreschool.com\\\/blog\"],\"url\":\"https:\\\/\\\/sreschool.com\\\/blog\\\/author\\\/admin\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis & Permanent Fix - SRE School","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-\u2192-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/","og_locale":"en_US","og_type":"article","og_title":"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis & Permanent Fix - SRE School","og_description":"Case study:&nbsp;VPS&nbsp;184.168.122.73&nbsp;\u2022 Host&nbsp;ip-184-168-122-73&nbsp;\u2022 Login user&nbsp;dsbokteam&nbsp;\u2022 Recovery work performed as&nbsp;root&nbsp;\u2022 Incident observed 3 November 2026 (server UTC).Audience:&nbsp;Linux administrators managing GoDaddy VPS [&hellip;]","og_url":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-\u2192-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/","og_site_name":"SRE School","article_published_time":"2026-11-03T19:02:08+00:00","article_modified_time":"2026-11-03T19:02:10+00:00","author":"Rajesh Kumar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Rajesh Kumar","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/#article","isPartOf":{"@id":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/"},"author":{"name":"Rajesh Kumar","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201"},"headline":"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &#038; Permanent Fix","datePublished":"2026-11-03T19:02:08+00:00","dateModified":"2026-11-03T19:02:10+00:00","mainEntityOfPage":{"@id":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/"},"wordCount":1989,"commentCount":0,"inLanguage":"en","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/","url":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/","name":"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis & Permanent Fix - SRE School","isPartOf":{"@id":"https:\/\/sreschool.com\/blog\/#website"},"datePublished":"2026-11-03T19:02:08+00:00","dateModified":"2026-11-03T19:02:10+00:00","author":{"@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201"},"breadcrumb":{"@id":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/#breadcrumb"},"inLanguage":"en","potentialAction":[{"@type":"ReadAction","target":["https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/sreschool.com\/blog\/godaddy-vps-ubuntu-20-04-%e2%86%92-22-04-upgrade-ssh-recovery-root-cause-analysis-permanent-fix\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/sreschool.com\/blog\/"},{"@type":"ListItem","position":2,"name":"GoDaddy VPS Ubuntu 20.04 \u2192 22.04: Upgrade, SSH Recovery, Root-Cause Analysis &#038; Permanent Fix"}]},{"@type":"WebSite","@id":"https:\/\/sreschool.com\/blog\/#website","url":"https:\/\/sreschool.com\/blog\/","name":"SRESchool","description":"Master SRE. Build Resilient Systems. Lead the Future of Reliability","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/sreschool.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en"},{"@type":"Person","@id":"https:\/\/sreschool.com\/blog\/#\/schema\/person\/0ffe446f77bb2589992dbe3a7f417201","name":"Rajesh Kumar","image":{"@type":"ImageObject","inLanguage":"en","@id":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f901a4f2929fa034a291a8363d589791d5a3c1f6a051c22e744acb8bfc8e022a?s=96&d=mm&r=g","caption":"Rajesh Kumar"},"sameAs":["http:\/\/sreschool.com\/blog"],"url":"https:\/\/sreschool.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/3520","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/comments?post=3520"}],"version-history":[{"count":1,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/3520\/revisions"}],"predecessor-version":[{"id":3521,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/posts\/3520\/revisions\/3521"}],"wp:attachment":[{"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/media?parent=3520"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/categories?post=3520"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sreschool.com\/blog\/wp-json\/wp\/v2\/tags?post=3520"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}