介绍
这是我们的SSH故障排除文章系列的延续 。
第一篇文章将帮助您确定何时解决问题,而不是迁移或重新部署问题,并为您需要有效地进行故障排除的信息提供资源。 本系列的其他部分包括如何识别和解决特定的SSH错误,并分解您需要调试成功的SSH连接的哪个阶段 :
- SSH连接故障排除 这会处理诸如连接被拒绝或超时的错误。
- 这包括客户端突然被丢弃或关闭,客户端抱怨密码协商,或与未知或更改的远程主机的问题。
- SSH 验证故障排除 这包括密码认证或SSH密钥认证拒绝的问题。
- 解决SSH Shell环境 ,这是本教程。 这包括无法分割进程,系统报告它不是有效的shell或到达主目录的问题。
一旦建立了SSH连接,并且您进行了身份验证,则会执行远程shell环境。 此时可能会出现几个问题,如下所述,随后可以采取的行动来解决这些问题。
先决条件
要解决SSH问题,您需要确保您的Droplet正常从Web控制台正常响应,并使用正常的网络配置。 您可以通过遵循如何和什么时候解决SSH问题教程来执行此操作 。
在对SSH进行故障排除之前,您应该始终检查云计算面板,以了解影响您的Droplet的区域,管理程序状态以及通过Web控制台的Droplet状态的持续问题 。
错误
以下是您可能遇到的一些常见的SSH环境错误。
不能chdir
到家庭目录
在某些情况下,您可能会对尝试访问主目录时导致问题的目录所有权或权限造成损害。 这可能会导致以下错误:
ErrorCould not chdir to home directory /home/user: Permission denied
ErrorCould not chdir to home directory /home/user: Input/output error
ErrorCould not chdir to home directory /home/user: No such file or directory
某些问题可能源自不存在的用户主目录,其所有权不正确或其权限太限制。 当文件系统问题已损坏主目录时也可能发生这种情况。
要解决此问题,请尝试检查主目录的存在,权限和所有权。
此帐户目前不可用
在某些情况下,用户可能被配置为没有登录shell。 这可以以几种方式显示在shell中没有响应。 您可能会看到如下错误:
[secondary_label]
This account is currently not available.
以下是此问题的一些潜在原因:
- 用户是系统用户,不是用于shell访问。
- 用户shell分配给
nologin
,true
,false
或其他非shell二进制文件。 在这种情况下,您可以更新用户shell 。
资源暂时不可用
像任何服务一样,SSH服务需要系统资源来操作。 这意味着当您的Droplet在资源受限的情况下,服务可能无法打开工作的shell环境。 这些情况包括耗尽系统内存,达到系统的打开文件限制或崩溃运行时环境。
您可能会看到如下错误消息:
Errorssh: connect to host example.com port 22: Resource temporarily unavailable
资源问题可能难以调试,并且取决于您对您的Droplet的访问类型。 请阅读下面关于如何处理资源问题 。
解决方案
以下是常见的SSH环境错误的一些故障排除方法和解决方案。
检查主目录
在某些情况下,您可能需要使用Web控制台以root身份登录,以评估具有足够权限的主目录来解决任何问题。 确保/home
,并使用stat
或类似的实用程序存在用户主目录的路径。
如果目录存在,请确保用户的主目录具有适当的权限(至少为700
)和所有权(用户而不是root )。
更新用户Shell
从Web控制台,以root身份登录,或以sudo
访问权限登录。 您可以直接查看/etc/passwd
文件,或使用getent
命令列出详细信息:
getent passwd user
你会看到这样的输出。 注意/usr/sbin/nologin
。
Outputuser:x:1000:1000::/home/user:/usr/sbin/nologin
要更新此操作,可以使用系统命令usermod
并指定要使用的正确shell,如/bin/bash
。
usermod -s /bin/bash user
如果再次运行getent
命令,您将看到输出中反映的更改:
Outputuser:x:1000:1000::/home/user:/bin/bash
然后,您可以尝试重新登录。
处理资源问题
处理资源问题是一个非常具体的情况。
如果资源争用的来源是由于网络请求(例如对Web应用程序的攻击),您可能可以禁用该服务或阻止来自Web控制台的防火墙流量。 这可能为您提供足够的空间来评估情况的影响并实施缓解策略或考虑扩展部署。
如果您无法从Web控制台登录,最后的措施是重新启动或重新启动Droplet。 根据资源耗尽的原因,这可能会简单地导致相同的环境,或者最初支持在尝试运行命令时给出Unable to fork process
错误的连接。 在重新启动后,但在其无响应之前,将Web控制台或SSH连接捕获到Droplet是解决根本原因的关键。
您可以在以下教程中了解有关扩展,负载平衡和扩展Droplet资源的更多信息:
结论
如果您需要进一步帮助建立与您的Droplet的SSH连接,您可以向我们的支持团队打开一张机票 。 确保包括:
- 用于连接的用户名,主机和端口
- 您希望使用的身份验证机制
- 全部输出的错误链接到错误阶段,包括SSH客户端的详细输出
- 目前为止您从故障排除收集的所有信息
- 在引用这篇文章时,你不清楚什么
包括所有上述诊断信息,并澄清您在尝试连接时遇到问题的位置,可以帮助我们快速加快您在需要时遇到问题的速度。