delete_expr=""
remoteuser="all"
remotehost="all"
-vzcontainer="all"
+vzct_expr="all"
list=0
empty=0
+# vz variables
+vzsize=0
+declare -a vzhosts
+declare -a vzports
+
list_keys()
{
this_user=$1
this_host=$2
- echo "$this_user@$this_host keys"
+ this_port=$3
+ echo "$this_user@$this_host:$this_port keys"
if test $verbose -eq 1; then
- ssh -l root $this_host "cat ~$this_user/.ssh/authorized_keys" | sed 's/ [^ =]\+\([^ =]\{10\}=\+\)/ ...\1/g' | sed 's/^/ * /g'
+ ssh -l root $this_host -p $this_port "cat ~$this_user/.ssh/authorized_keys" | sed 's/ [^ =]\+\([^ =]\{10\}=\+\)/ ...\1/g' | sed 's/^/ * /g'
else
- ssh -l root $this_host "cat ~$this_user/.ssh/authorized_keys" | sed 's/ [^ =]*=\+//g' | sed 's/^/ * /g'
+ ssh -l root $this_host -p $this_port "cat ~$this_user/.ssh/authorized_keys" | sed 's/ [^ =]*=\+//g' | sed 's/^/ * /g'
fi
echo
}
{
this_user=$1
this_host=$2
- echo "cleaning $this_user@$this_host keys"
- ssh -l root $this_host "\
+ this_port=$3
+ echo "cleaning $this_user@$this_host:$this_port keys"
+ ssh -l root $this_host -p $this_port "\
sed -i.bak '/^[ \t]*$/d' ~$this_user/.ssh/authorized_keys ;\
( grep 'ssh' ~$this_user/.ssh/authorized_keys > /dev/null 2>&1 ||\
cp ~$this_user/.ssh/authorized_keys.bak ~$this_user/.ssh/authorized_keys) ;\
{
this_user=$1
this_host=$2
- this_expr=$3
- echo "delete $this_user@$this_host keys that match '$this_expr'"
- ssh -l root $this_host "\
+ this_port=$3
+ this_expr=$4
+ echo "delete $this_user@$this_host:$this_port keys that match '$this_expr'"
+ ssh -l root $this_host -p $this_port "\
sed -i.bak '/$this_expr/d' ~$this_user/.ssh/authorized_keys ;\
( grep 'ssh' ~$this_user/.ssh/authorized_keys > /dev/null 2>&1 ||\
cp ~$this_user/.ssh/authorized_keys.bak ~$this_user/.ssh/authorized_keys) ;\
{
this_user=$1
this_host=$2
- this_expr=$3
- echo "get first $this_user@$this_host keys that matches '$this_expr'"
- ssh -l root $this_host "\
+ this_port=$3
+ this_expr=$4
+ echo "get first $this_user@$this_host:$this_port keys that matches '$this_expr'"
+ ssh -l root $this_host -p $this_port "\
grep '$this_expr' ~$this_user/.ssh/authorized_keys | head -n 1
"
}
{
this_user=$1
this_host=$2
- this_key=$3
- echo "add $this_key to $this_user@$this_host"
- cat $this_key | ssh -l root $this_host "\
+ this_port=$3
+ this_key=$4
+ echo "add $this_key to $this_user@$this_host:$this_port"
+ cat $this_key | ssh -l root $this_host -p $this_port "\
cat >> ~$this_user/.ssh/authorized_keys
"
}
+# get list of OpenVZ VEs (virtual enviroments, containers) on host
+get_vzlist()
+{
+ this_host=$1
+ this_expr=$2
+
+ if test "$this_expr" == "all" -o "$this_expr" == "vzall"; then
+ this_expr="."
+ fi
+
+ velist=$(ssh -l root $this_host "\
+ vzlist 2>&1 | grep '^[ \t]*[0-9]' |\
+ awk '"'$1'" ~ /$this_expr/ {print "'$1'";}'
+ ")
+ vzhosts=()
+ vzports=()
+ for i in $velist; do
+ vzhosts+=("$this_host")
+ vzports+=("${i}22")
+ done
+ vzsize=${#vzhosts[*]}
+}
+
wrapper()
{
this_user=$1
this_host=$2
+ this_port=$3
if test ! -z "$add_keyfile"; then
- add_key "$this_user" "$this_host" "$add_keyfile"
+ add_key "$this_user" "$this_host" "$this_port" "$add_keyfile"
elif test ! -z "$delete_expr"; then
- delete_keys "$this_user" "$this_host" "$delete_expr"
+ delete_keys "$this_user" "$this_host" "$this_port" "$delete_expr"
elif test ! -z "$get_expr"; then
- get_key "$this_user" "$this_host" "$get_expr"
+ get_key "$this_user" "$this_host" "$this_port" "$get_expr"
elif test $empty -eq 1; then
- clear_empty "$this_user" "$this_host"
+ clear_empty "$this_user" "$this_host" "$this_port"
elif test $list -eq 1; then
- list_keys "$this_user" "$this_host"
+ list_keys "$this_user" "$this_host" "$this_port"
fi
}
{
echo "Usage:" >&2
echo -e "\t$0 -h" >&2
- echo -e "\t$0 [-v] [-r remotehost] [-c vzcontainer] [-u user] -a key" >&2
- echo -e "\t$0 [-v] [-r remotehost] [-c vzcontainer] [-u user] -d string" >&2
- echo -e "\t$0 [-v] [-r remotehost] [-c vzcontainer] [-u user] -g string" >&2
- echo -e "\t$0 [-v] [-r remotehost] [-c vzcontainer] [-u user] -l" >&2
- echo -e "\t$0 [-v] [-r remotehost] [-c vzcontainer] [-u user] -e" >&2
+ echo -e "\t$0 [-v] [-r remotehost] [-c vzct_expr] [-u user] -a key" >&2
+ echo -e "\t$0 [-v] [-r remotehost] [-c vzct_expr] [-u user] -d string" >&2
+ echo -e "\t$0 [-v] [-r remotehost] [-c vzct_expr] [-u user] -g string" >&2
+ echo -e "\t$0 [-v] [-r remotehost] [-c vzct_expr] [-u user] -l" >&2
+ echo -e "\t$0 [-v] [-r remotehost] [-c vzct_expr] [-u user] -e" >&2
}
while getopts "hvr:c:u:a:d:g:le" option; do
remotehost="$OPTARG"
;;
c)
- vzcontainer="$OPTARG"
+ vzct_expr="$OPTARG"
;;
u)
remoteuser="$OPTARG"
if test ! -z "$add_keyfile" -o ! -z "$delete_expr" -o ! -z "$get_expr" -o "$empty" -eq 1 -o "$list" -eq 1; then
if test "$remotehost" == "all"; then
for host in ${remote_hosts[*]}; do
+ if test "$vzct_expr" == "all" -o "$vzct_expr" == "base" -o "$vzct_expr" == "0"; then
+ if test "$remoteuser" == "all"; then
+ for user in ${remote_users[*]}; do
+ wrapper "$user" "$host" 22
+ done
+ else
+ wrapper "$remoteuser" "$host" 22
+ fi
+ fi
+ get_vzlist "$host" "$vzct_expr"
+ for ((i = 0; i < $vzsize; i++)); do
+ if test "$remoteuser" == "all"; then
+ for user in ${remote_users[*]}; do
+ wrapper "$user" "${vzhosts[$i]}" "${vzports[$i]}"
+ done
+ else
+ wrapper "$remoteuser" "${vzhosts[$i]}" "${vzports[$i]}"
+ fi
+ done
+ done
+ else
+ if test "$vzct_expr" == "all" -o "$vzct_expr" == "base" -o "$vzct_expr" == "0"; then
if test "$remoteuser" == "all"; then
for user in ${remote_users[*]}; do
- wrapper $user $host
+ wrapper "$user" "$remotehost" 22
done
- continue
+ else
+ wrapper "$remoteuser" "$remotehost" 22
fi
- wrapper $remoteuser $host
- done
- else
- if test "$remoteuser" == "all"; then
- for user in ${remote_users[*]}; do
- wrapper $user $remotehost
- done
- else
- wrapper $remoteuser $remotehost
fi
+ get_vzlist "$remotehost" "$vzct_expr"
+ for ((i = 0; i < $vzsize; i++)); do
+ if test "$remoteuser" == "all"; then
+ for user in ${remote_users[*]}; do
+ wrapper "$user" "${vzhosts[$i]}" "${vzports[$i]}"
+ done
+ else
+ wrapper "$remoteuser" "${vzhosts[$i]}" "${vzports[$i]}"
+ fi
+ done
fi
fi