I tried running a command on several remote servers at once via Ansible:
$ ansible -a 'rpcinfo -p' centos
Which returned a series of errors:
ariel.osric.net | FAILED | rc=2 >>
[Errno 2] No such file or directory
caliban.osric.net | FAILED | rc=2 >>
[Errno 2] No such file or directory
trinculo.osric.net | FAILED | rc=2 >>
[Errno 2] No such file or directory
I also received an error when I tried running it via ssh:
$ ssh ariel.osric.net 'rpcinfo -p'
bash: rpcinfo: command not found
I can run it interactively on a specific host:
$ ssh ariel.osric.net
$ rpcinfo -p
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
The problem is that the user profile isn’t loaded when running via ansible or a non-interactive ssh session. rpcinfo
isn’t found in the PATH
. In the next step I identify the full path:
$ ssh ariel.osric.net
$ whereis rpcinfo
rpcinfo: /usr/sbin/rpcinfo /usr/share/man/man8/rpcinfo.8.gz
(/usr/sbin
is added to the path via /etc/profile
)
Once I specified the full path, it worked:
$ ansible -a '/usr/sbin/rpcinfo -p' centos
ariel.osric.net | SUCCESS | rc=0 >>
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
Etc.