Вот текст сценария, который я запускаю ...
for i in `cat ${hostfile}`
do
echo "Adding user $username on $i"
ssh -q $i /usr/bin/sudo /usr/sbin/adduser $username --gecos "$username,,," --disabled-password;
echo "$username:$password" | /usr/bin/sudo chpasswd;
/usr/bin/sudo mkdir -p /home/$username/.ssh;
/usr/bin/sudo touch /home/$username/.ssh/authorized_keys;
/usr/bin/sudo chmod 600 /home/$username/.ssh/authorized_keys;
/usr/bin/sudo chmod 700 /home/$username/.ssh;
/usr/bin/sudo chown -R $username:$username /home/$username
#ssh -q $i /usr/bin/sudo /usr/sbin/adduser $username --gecos "$username,,," --disabled-password; sudo echo $username:'$password' | chpasswd; /usr/bin/sudo mkdir /home/$username/.ssh; /usr/bin/sudo touch /home/$username/.ssh/authorized_keys; /usr/bin/sudo chmod 600 /home/$username/.ssh/authorized_keys; /usr/bin/sudo chmod 700 /home/$username/.ssh; /usr/bin/sudo chown -R $username:$username /home/$username; adduser $username $group
done
Выполняется, но не создает каталог .ssh.
Ваш скрипт выполняет только одну команду на удаленном сервере:
ssh -q $i /usr/bin/sudo /usr/sbin/adduser $username --gecos "$username,,," --disabled-password;
Все, что после этого выполняется вместо этого на вашем локальном компьютере. Если вы хотите выполнить несколько команд в одном сеансе ssh
, вам нужно передать их в ssh
как одну команду. Например:
while IFS= read -r host; do
echo "Adding user $username on $i"
ssh -q "$host" "/usr/bin/sudo /usr/sbin/adduser '$username' --gecos '$username,,,' --disabled-password; \
echo '$username:$password' | /usr/bin/sudo chpasswd; \
/usr/bin/sudo mkdir -p /home/'$username'/.ssh; \
/usr/bin/sudo touch /home/'$username'/.ssh/authorized_keys; \
/usr/bin/sudo chmod 600 /home/'$username'/.ssh/authorized_keys; \
/usr/bin/sudo chmod 700 /home/'$username'/.ssh; \
/usr/bin/sudo chown -R '$username:$username' /home/'$username'"
done < "$hostfile"
Обратите внимание, что все команды находятся в одном и том же кавычке " "
. \
в конце строки просто для ясности: они позволяют добавить следующую команду в отдельной строке.