如何让Bash脚本为指定用户创建SSH密钥对?
问题原因
你脚本里的sudo su achebeh_admin会启动一个新的交互式shell,原脚本会暂停执行,直到你手动退出这个新shell才会继续跑后面的ssh-keygen——但这时候已经切回原用户了,所以密钥根本没在目标用户环境下生成。
解决方法
直接用sudo -u <用户名>以目标用户身份执行命令,不用切换shell。另外ssh-keygen默认是交互式的,脚本里要加参数让它自动执行:
修正后的脚本:
for group in admin support engineering do sudo groupadd $group sudo useradd -m -s /bin/bash achebeh_${group} done sudo passwd achebeh_admin # 先确保目标用户的.ssh目录存在并设置正确权限 sudo -u achebeh_admin mkdir -p ~achebeh_admin/.ssh sudo -u achebeh_admin chmod 700 ~achebeh_admin/.ssh # 非交互式生成SSH密钥对(空密码) sudo -u achebeh_admin ssh-keygen -t rsa -N "" -f ~achebeh_admin/.ssh/id_rsa
关键参数说明
sudo -u achebeh_admin:直接以achebeh_admin用户身份执行后面的命令,不会开启新shell,脚本能持续执行-N "":给密钥设置空密码,避免脚本运行时弹出输入密码的交互提示-f ~achebeh_admin/.ssh/id_rsa:明确指定密钥文件的存储路径,防止因环境变量问题导致路径错误mkdir -p和chmod 700:提前创建.ssh目录并设置仅用户本人可读写的权限,避免ssh-keygen因目录不存在或权限错误失败
内容的提问来源于stack exchange,提问作者user11631346
相关产品推荐
相关产品推荐

