我是一名新系统管理员,正在边工作边学习。我这里有一个 bash 脚本,但我无法使用它。这只是一个测试脚本,因为它是我的第一个脚本,所以我知道将 authorized_keys 设置为 777 是不明智的,但我这样做只是为了检查我的脚本现在是否有效。
我正在使用带密码的 LDAP,因此使用密钥通过 SSH 连接到远程设备并不理想,因此我使用 ssh pass。
此代码可运行至 useradd,然后它不会 mkdir .ssh,不会触及/创建 authorized_keys,也不会更改文件权限。
为什么?
#!/bin/bash -x
username="test"
echo Enter server IP:
read server
sshpass -p randompassword ssh myusername@$server sudo -i 'useradd test1;
echo $username user added, press any key to continue;
read;
sudo -i;
mkdir /home/test1/.ssh;
cd /home/test1/.ssh;
touch authorized_keys;
chmod 777 authorized_keys'
我可能没有正确理解 bash 脚本的一些内容,但所有这些命令都需要在远程机器上运行。
答案1
删除“sudo -i”行并仅在您需要的每个命令前放置“sudo”。
例子:
sudo mkdir /home/test1/.ssh;
cd /home/test1/.ssh;
sudo touch authorized_keys;
sudo chmod 777 authorized_keys'
答案2
如果您想“管理多台服务器”,Bash 脚本是错误的方法,因为您承认自己是新手,请学习 Puppet 之类的 CMS,使用真正的配置管理系统管理您的服务器。请认真考虑您的系统管理方法,不要问自己“我如何解决这个小问题/任务,而要考虑如何从一个地方管理我的所有服务器并确保所有服务器的配置一致。”
从这个角度考虑,假设你让这个脚本运行,然后你决定删除“测试 1”帐户,现在你需要编写另一个脚本。而在 CMS 中,你可以使用以下命令添加用户:
@user {“测试1”: 确保 => 存在, #密码 => 'hashed_value' 评论 => “测试用户”, 组 => “轮子” managehome => true, }
然后,如果您决定稍后删除该用户,请将配置更改为:
@user {“测试1”: 确保 => 缺席, }
调用或“实现”所有所需服务器上的此资源,然后大功告成,再喝一杯咖啡,为自己将完成任务的时间缩短了 95% 而感到自豪。将所有配置保存在 Subversion 或其他版本控制系统中,并记录更改此配置的原因、谁要求您更改此配置以及何时更改。因此,当您的老板问起您为什么要删除所有服务器上的 test1 帐户时,您可以查看您的笔记并说,因为您在 3 月 15 日的电子邮件中要求我这样做。要巧干,不要苦干。
祝你好运。