排查访问权限问题
本页面提供裸金属解决方案访问问题的排查提示。
查看您的疑问或问题是否已在已知问题和限制页面中得到解决。
SSH 客户端无法连接
如果您的 SSH 客户端无法连接到服务器,您可能会看到以下错误之一:
connection timeout
或connection refused
:SSH 客户端无法连接。Permission denied (publickey)
:SSH 客户端无法进行身份验证。
如需诊断失败的 SSH 连接,请按以下步骤操作:
测试连接性。
使用
ping
、traceroute
和nc
命令确保主机可访问并且 SSH 端口 (22) 已打开。ping SERVER_NAME
traceroute SERVER_NAME
echo "" | nc SERVER_NAME 22
如果这不起作用,则问题可能在于网络层,与 SSH 无关。
检查客户端调试输出。
启用 SSH 协议的详细程度。
ssh -v SERVER_NAME -i ~/.ssh/id_ecdsa
该命令会输出显示客户端 SSH 协议密钥事件的调试输出。
以下示例输出显示客户端发送了其密钥,但服务器拒绝了该密钥。服务器要求使用其他公钥继续进行身份验证,但客户端没有额外的密钥可以提供。
.. .. .. debug1: Server host key: ecdsa-sha2-nistp256 SHA256:V9cRYdqcAJv+RPfN+oofNTVdUxs6VlocP4uMWOxeGKI debug1: Host 'bms-server' is known and matches the ECDSA host key. debug1: Found key in /root/.ssh/known_hosts:1 debug1: rekey after 134217728 blocks debug1: SSH2_MSG_NEWKEYS sent debug1: expecting SSH2_MSG_NEWKEYS debug1: SSH2_MSG_NEWKEYS received debug1: rekey after 134217728 blocks debug1: SSH2_MSG_EXT_INFO received debug1: kex_input_ext_info: server-sig-algs=
debug1: SSH2_MSG_SERVICE_ACCEPT received debug1: Authentications that can continue: publickey debug1: Next authentication method: publickey debug1: Offering ECDSA public key: /root/.ssh/id_ecdsa debug1: Authentications that can continue: publickey debug1: No more authentication methods to try. Permission denied (publickey). 如果 SSH 详细输出未明确指出错误消息的原因,请运行
strace
命令:strace ssh SERVER_NAME -i ~/.ssh/id_ecdsa > strace-ssh.txt 2>&1
检查
strace
输出是否存在与核心问题相关的错误。在某些情况下,凭借客户端调试输出无法确认问题。您可能还需要运行服务器端跟踪来查找错误。无法通过 SSH 连接到服务器后,请使用交互式串行控制台来执行后续步骤。
检查服务器端调试输出。
找到当前的 SSH 设置。
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"
如需获取 SSH 的详细信息,请在
/etc/ssh/sshd_config
文件中设置以下参数。SyslogFacility AUTH LogLevel DEBUG
如需应用更改,请重启服务。
service sshd restart
在客户端,运行
ssh
命令并从日志中提取sshd
消息:grep sshd /var/log/messages
或者,您可以使用以下命令导出该时间段内的所有相关消息:
journalctl -u sshd -S "START_TIME" -U "END_TIME" --utc
请替换以下内容:
START_TIME
:时间段的开始时间,格式为yyyy-mm-dd hh:mm:ss
。END_TIME
:时间段的结束时间,格式为yyyy-mm-dd hh:mm:ss
。
示例:
journalctl -u sshd -S "2023-04-25 18:38:00" -U "2023-04-25 18:40:00" --utc
如需解决这些问题,请考虑执行以下步骤:
验证客户端密钥文件是否设置了只读权限(标志
400
)。否则,SSH 客户端不会接受它。如需为正在使用的私钥设置只读标志,请运行以下命令:
chmod 400 ~/.ssh/id_ed25519
在服务器端,检查是否已在相应用户的本地配置文件 (
~/.ssh/authorized_keys
) 中指定客户端公钥。在某些情况下,问题可能与 SSH 协议版本或 SSH 算法有关。服务器端和客户端调试输出可能指示此类问题。通常,
ssh
和sshd_config
的man
页面提供了维护必要配置的详细信息。例如,如需查找支持的密钥交换算法或加密算法,请使用以下命令:# Find key exchange algorithms ssh -Q kex # Find the symmetric encryption ciphers ssh -Q cipher