Назад | Перейти на главную страницу

Назначьте список удаленных файлов authorized_keys локальной переменной

Я хотел бы назначить список файлов удаленных авторизованных ключей локальной переменной.

INCLUDE=$(ssh myhost.mydomain.com "for Z in `awk -F : '{print $1}' /etc/passwd`; do INCLUDE+=\"/home/${Z}/.ssh/authorized_keys \"; done; echo $INCLUDE")

Как я могу правильно избежать вышеуказанной команды, чтобы сделать ее действительным запросом?

Используя этот оператор, вы получите странный результат, например / home / bin, / home / root или / home / daemon.

for Z in `awk -F : '{print $1}' /etc/passwd`; do INCLUDE+="/home/${Z}/.ssh/authorized_keys "

ls /home/*/.ssh/authorized_keys подходит лучше.

Итоговый сценарий может быть таким:

INCLUDE=$(ssh root@myhost.mydomain.com "ls /home/*/.ssh/authorized_keys")

Но вам нужно подключиться к ssh-серверу как root

Наиболее подверженным ошибкам методом было бы получить HOME каталог каждого пользователя из базы данных passwd и проверить его на наличие authorized_keys файлы. Также обратите внимание, что openssh поддерживает оба authorized_keys И authorized_keys2 файлы.

Эта команда должна выдать такой список:

getent passwd | awk -F: '$6!=""{print $6}' | \
    xargs -rI{} find {} -maxdepth 2 -mindepth 2 \
        -path \*/.ssh/\* \
        \( -name authorized_keys -o -name authorized_keys2 \) \
        -type f 2>/dev/null

Вы должны соответствующим образом экранировать кавычки, если собираетесь выполнять его через ssh. Однако вы можете поместить его в файл сценария и передать его /bin/sh на удаленной стороне:

<scriptfile ssh remote.host /bin/sh
sgeorge-mn:~ sgeorge$ cat awk_ssh.sh 
ssh -q suku@192.168.97.128 <<'HERE'
cat /etc/passwd | grep '/bin/bash'| awk -F: '{system("ls /home/"$1"/.ssh/authorized_keys")}'
HERE

sgeorge-mn:~ sgeorge$ INCLUDE=$(bash awk_ssh.sh)
suku@192.168.97.128's password: 

sgeorge-mn:~ sgeorge$ echo $INCLUDE
/home/root/.ssh/authorized_keys /home/suku/.ssh/authorized_keys