amazon-web-services - 为什么用户数据参数中的脚本会忽略 ~/.ssh/config 中的配置?
问题描述
我正在尝试在 AWS 上设置一些现场实例启动模板。启动时,必须执行一组命令,其中一个scp
命令实质上是将文件复制到远程主机。
为此,我编辑了~/.ssh/config
文件并添加了必要的 SSH 密钥来设置安全连接。当我在 AWS 实例(例如scp file_name.txt ubuntu@host:/home/ubuntu/
)上手动测试它时,这非常有效。
但是,当我在用户数据参数中包含相同的 SSH 命令时(这样它将在实例启动时自动执行),连接失败,因为.ssh/config
未应用配置。但是当我直接在这个用户数据命令中手动提供配置选项时,它就可以工作了。
那么为什么用户数据参数中的脚本会忽略中的配置~/.ssh/config
呢?如何强制脚本咨询~/.ssh/config
?
touch file_name.txt
相关问题:我可以通过简单地调用关联的命令名称(例如)手动调用实例中的内置命令。在用户数据中执行此操作时,我必须明确指定相关二进制文件的完整路径(例如/usr/bin/touch file_name.txt
),否则它会抱怨找不到该命令。为什么会这样?这背后的原因可能是实例尚未正确初始化吗?
解决方案
如果您尝试调试用户数据,您应该检查/var/log/cloud-init-output.log
将包含输出的文件。
当您处理 SSH 密钥时,值得注意的是 user-data 命令将以 root 用户身份运行,因此调用~/.ssh
将签入/root/.ssh
. 您应该确保 SSH 密钥对运行它的用户有效,否则将被视为不安全。
文档中提供了有关用户数据的更多信息。
推荐阅读
- c# - DbContext 和任务
- java - Swagger openapi:openapi.yaml/swagger-ui 中的过滤方法
- javascript - 如何创建具有多语言路线的一页网站?
- spring-boot - Spring 不识别自定义键进行清理,而是指默认键
- android - Android Studio - 为什么模拟器进程在没有选择皮肤时被杀死
- javascript - 如何在加减按钮单击时显示显示/隐藏表格
- python - plt.imshow(np.squeeze(x_train[3]), cmap="gray"); 这个命令是什么意思?
- python - 如何使代码的排行榜部分工作?
- c# - 在 SceneDelegate.ContinueUserActivity 中验证用户的模式?
- c# - 使用 C# 在 AWS S3 存储桶中保存屏幕截图