SoftLayer虚拟客户机provisioning时如何添加非root用户SSH密钥
解答:SoftLayer支持在Provisioning阶段为非Root用户添加SSH密钥
是的,完全可以实现!既然你已经禁用了root的SSH登录,且默认的SshKeys模板属性只对root生效,推荐你用以下两种可靠的方法:
方法1:使用自定义Post-Provisioning脚本(最灵活通用)
SoftLayer允许在虚拟机创建过程中执行自定义脚本,你可以通过这个脚本直接给vcap用户配置SSH密钥:
具体步骤:
- 在创建虚拟机的界面(或者API调用中)找到User Data(或Post-Provisioning Script)的配置项
- 编写如下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
- 如果是通过API调用创建虚拟机,需要将脚本内容Base64编码后传入
userData字段,比如用命令:echo -n "你的脚本内容" | base64
方法2:利用Cloud-Init(如果你的镜像支持)
如果你的自定义镜像已经安装了cloud-init(很多现代Linux镜像默认带这个工具),可以通过Cloud-Init的配置文件直接指定给vcap用户添加密钥:
- 编写如下YAML配置:
users: - name: vcap ssh_authorized_keys: - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQ..."
- 将这个YAML内容作为User Data传入虚拟机创建流程,Cloud-Init会自动处理用户密钥的配置,无需手动设置权限和目录。
关键注意事项:
- 务必确保
vcap用户在你的镜像中存在,否则脚本或Cloud-Init会报错(方法1的脚本包含了创建用户的逻辑,可以按需保留) - SSH密钥相关文件/目录的权限必须严格设置:
.ssh目录为700,authorized_keys为600,所有者是vcap,否则SSH服务会拒绝该用户的登录请求 - 如果你经常需要创建这类虚拟机,建议把脚本或Cloud-Init配置保存为模板,方便重复使用
内容的提问来源于stack exchange,提问作者Edward
相关产品推荐
相关产品推荐

