Как запустить sudo с параллельным ssh

Имейте в виду, что dd - это необработанный интерфейс для read () , write ( ) и lseek () системный вызов. Вы можете надежно использовать его только для извлечения фрагментов данных из обычных файлов, блочных устройств и некоторых символьных устройств (например, / dev / urandom ), то есть файлов, для которых прочитано (buf, size) гарантированно вернет размер , пока не будет достигнут конец файла.

Для каналов, сокетов и большинства символьных устройств (например, ttys) у вас нет такой гарантии, если вы не выполните read () размера 1 или не используете расширение GNU dd . iflag = fullblock .

Или:

{
  gdd < file1 bs=1M iflag=fullblock count=99 skip=1
  gdd < file2 bs=1M iflag=fullblock count=10
} > final_output

Или:

M=1048576
{
  dd < file1 bs=1 count="$((99*M))" skip="$M"
  dd < file2 bs=1 count="$((10*M))"
} > final_output

Или с оболочками со встроенной поддержкой оператора поиска, например ksh93 :

M=1048576
{
  command /opt/ast/bin/head -c "$((99*M))" < file1 <#((M))
  command /opt/ast/bin/head -c "$((10*M))" < file2
}

Или zsh (при условии, что ваш head поддерживает здесь параметр -c ):

zmodload zsh/system &&
{
  sysseek 1048576 && head -c 99M &&
  head -c 10M < file2
} < file1 > final_output
4
25.09.2016, 05:45
3 ответа

пробовали ли вы запустить это путем повторения пароля в оболочке?

echo "echo 'yourpassword'; sudo -S -c 'ls -l / root'" | pssh -I -H hostlist.txt

0
27.01.2020, 20:55

Чтобы обеспечить максимально надежный пароль, попробуйте эту версию(psshв CentOS, Fedora и parallel-sshв Ubuntu, Debian):

stty -echo; printf "Password: "; read PASS; stty echo; echo "${PASS}" | \ ssh <USER>@localhost "sudo -S dmesg"

Обновление (спасибо @chutz):

read -s -p "Password: "; echo "${REPLY}" | \ ssh <USER>@localhost "sudo -S dmesg"

и затем адаптируйте его к pssh(обновите соответствующим образом):

read -s -p "Password: "; echo "${REPLY}" | \ pssh -H <USER>@localhost -o /tmp/output -I "sudo -S dmesg"

Я использую то же самое для специального -сбора дампов с нескольких серверов. Остановите его, используя Ctrl + C , как обычно. Он покажет [FAILURE] <HOST> Interrupted, но это только потому, что в противном случае tcpdump работал бы бесконечно -, вывод по-прежнему находится в обычном месте. Опция -t 0предназначена для того, чтобы соединение не прерывалось по тайм-ауту. Я также мог бы использовать tmux или screen и собрать дампы позже.

read -s -p "Password: "; echo "${REPLY}" | \ pssh -h <HOSTFILE> -o /tmp/output -t 0 -I "sudo -S tcpdump -l -nn -vv -i any not port 22"

Убедитесь, что вы указали правильного пользователя ssh и ранее подключались к этим серверам. Локальное тестирование обычно не позволяет отключить весь парк серверов. Вы можете использовать адреса 127.0.0.X вместо localhost для аппроксимации нескольких хостов.

5
27.01.2020, 20:55

Я хотел бы порекомендовать мой простой инструмент "spssh.sh" (https://github.com/tangruize/spssh), который прост (всего 36 sloc ), но достаточно полезен. В отличие от параллельного -ssh, spssh.sh является интерактивным и поддерживает параллельное/раздельное выполнение cmd. Надеюсь, поможет!

0
23.09.2020, 07:48

Теги

Похожие вопросы