Quiero ejecutar un comando para cambiar la propiedad de los directorios / home. Ejemplo
Ejemplo:
[root@remoteServer]# ls -l /home
drwxr-xr-x. 17 root root 4096 Sep 9 2014 user1
drwxr-xr-x. 17 root root 4096 Sep 9 2014 user2
drwxr-xr-x. 17 root root 4096 Sep 9 2014 user3
[root@remoteServer]#
[root@remoteServer]#id user1
uid=1101(user1) gid=1200(groupO)
[root@remoteServer]#id user2
uid=1102(user2) gid=1200(groupO)
[root@remoteServer]#id user2
uid=1103(user3) gid=1200(groupO)
Voy a cambiar la propiedad de estos directorios de esta manera:
[root@remoteServer]# ls -l /home
drwxr-xr-x. 17 user1 groupO 4096 Sep 9 2014 user1
drwxr-xr-x. 17 user2 groupO 4096 Sep 9 2014 user2
drwxr-xr-x. 17 user3 groupO 4096 Sep 9 2014 user3
Yo uso un script para esto desde localServer. El guión es así:
#!/bin/bash
for ip in $(cat ipListFile)
do
ssh -o ConnectTimeout=2 -o StrictHostKeyChecking=no -o PasswordAuthentication=no $ip "for i in /home/*; do chown $(echo $i | awk -F"home/" '{ print $2 }'):groupO $i; done;"
done
Hay un problema en para lazo. Este bucle está funcionando en el servidor remoto local. Pero no puedo usar este comando en localServer como script remoto para remoteServer. Cuando intento este comando en localServer, la variable "$ i" tiene un valor ridículo como "17123891".
$$i
en lugar de$i
. Se escapará el$$
sobre el local servidor y el remoto el shell del servidor recibirá$i
. No puedo probar esto ahora (por lo tanto, comentar), pero debería funcionar. Asegúrate de probarlo sin embargo.\$
escapar$
,$$
es para makefileRespuestas:
Encontré el error con cambiar la respuesta de Nathan'a. La solución está usando un carácter "\" con cada "$" caracteres como "\ $". Así que el comando final es:
fuente
La solución más simple sería enviar el script y luego ejecutarlo.
para evitar el tiempo de espera múltiple
si cada
/home/userX
debe pertenecer auserX
puedes probar
fuente