操作系统信息
例如:虚拟机,Centos7.5

问题是:
failed to get SSH session: ssh: setenv failed

原因:

我这次的原因时因为服务升级了两个包,将其升级到了openssl-3.3.1和openssh-9.9p2。

原因分析:

这是 OpenSSH 9.8+ 引入的新限制,即使 PermitUserEnvironment 开启,也默认 拒绝客户端设置某些环境变量(如 kubekey 使用的 KUBERNETES_SSH_CHECK)。

解决方法:

🛠️ 解决方案:允许 kubekey 设置的特定环境变量

你需要在 /etc/ssh/sshd_config 中添加一行:

AcceptEnv KUBERNETES_SSH_CHECK LANG LC_*

这将明确允许客户端设置 kubekey 所需的环境变量,而不是完全放开所有变量(更安全)。

🧪 完整修复步骤如下:

✅ Step 1: 修改 sshd_config

编辑文件:

sudo vi /etc/ssh/sshd_config

在任意位置添加以下行(建议放在 PermitUserEnvironment yes 下方,注意 PermitUserEnvironment 要开启并设置为 yes):

AcceptEnv KUBERNETES_SSH_CHECK LANG LC_*

LANG 和 LC_* 是常见的国际化环境变量,通常也会被 kubekey 或其他工具使用。

✅ Step 2: 重启 SSH 服务

sudo systemctl restart sshd

即可!

📦 一键脚本(可复制运行)

# 添加 AcceptEnv 行

echo "AcceptEnv KUBERNETES_SSH_CHECK LANG LC_*" | sudo tee -a /etc/ssh/sshd_config

# 重启 sshd

sudo systemctl restart sshd

# 可选:查看当前 sshd 配置中相关字段

grep -E 'PermitUserEnvironment|AcceptEnv' /etc/ssh/sshd_config