You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SoftLayer虚拟客户机provisioning时如何添加非root用户SSH密钥

解答:SoftLayer支持在Provisioning阶段为非Root用户添加SSH密钥

是的,完全可以实现!既然你已经禁用了root的SSH登录,且默认的SshKeys模板属性只对root生效,推荐你用以下两种可靠的方法:

方法1:使用自定义Post-Provisioning脚本(最灵活通用)

SoftLayer允许在虚拟机创建过程中执行自定义脚本,你可以通过这个脚本直接给vcap用户配置SSH密钥:

具体步骤:

  1. 在创建虚拟机的界面(或者API调用中)找到User Data(或Post-Provisioning Script)的配置项
  2. 编写如下Shell脚本,替换掉示例中的公钥内容:
#!/bin/bash
# 确保vcap用户存在(如果镜像已包含可跳过)
if ! id -u vcap >/dev/null 2>&1; then
    useradd -m vcap
fi
# 创建并配置.ssh目录权限
mkdir -p /home/vcap/.ssh
chmod 700 /home/vcap/.ssh
# 写入SSH公钥
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..." > /home/vcap/.ssh/authorized_keys
# 设置正确的文件权限(这一步很关键,否则SSH会拒绝访问)
chmod 600 /home/vcap/.ssh/authorized_keys
chown -R vcap:vcap /home/vcap/.ssh
  1. 如果是通过API调用创建虚拟机,需要将脚本内容Base64编码后传入userData字段,比如用命令:echo -n "你的脚本内容" | base64

方法2:利用Cloud-Init(如果你的镜像支持)

如果你的自定义镜像已经安装了cloud-init(很多现代Linux镜像默认带这个工具),可以通过Cloud-Init的配置文件直接指定给vcap用户添加密钥:

  1. 编写如下YAML配置:
users:
  - name: vcap
    ssh_authorized_keys:
      - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."
  1. 将这个YAML内容作为User Data传入虚拟机创建流程,Cloud-Init会自动处理用户密钥的配置,无需手动设置权限和目录。

关键注意事项:

  • 务必确保vcap用户在你的镜像中存在,否则脚本或Cloud-Init会报错(方法1的脚本包含了创建用户的逻辑,可以按需保留)
  • SSH密钥相关文件/目录的权限必须严格设置:.ssh目录为700,authorized_keys为600,所有者是vcap,否则SSH服务会拒绝该用户的登录请求
  • 如果你经常需要创建这类虚拟机,建议把脚本或Cloud-Init配置保存为模板,方便重复使用

内容的提问来源于stack exchange,提问作者Edward

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:56:50