Вы ожидаете что все команды после ssh "$server"
быть выполненными в ssh? Это не то, как это работает. ssh с именем хоста и никакими другими аргументами запускает интерактивную сессию. После того, как это выйдет, сценарий продолжает следующую команду (exec < filelist.txt
). Это не удаленная команда в ssh; ssh делают и уводят к этому времени команда после того, как это будет достигнуто. Это - просто нормальное последовательное выполнение содержания сценария.
Интерактивные ssh сессии с перенаправленным stdin несколько необычны. Вот почему Вы получаете предупреждение. (Устранить предупреждение Вас может использовать -t
или -T
)
Если Вы хотите передать большой сценарий по соединению SSH и выполнить его удаленно, можно сделать это со здесь документ, как это:
ssh "$server" sh <<EOF
your big script here...
EOF
Обязательно тщательно рассмотрите, какие переменные должны быть расширены локальным сценарием и который должен быть расширен во время выполнения удаленного сценария. Незащищенное $
в heredoc будет расширен локально. Для защиты его так, удаленная оболочка видит a $
, использовать \$
. Если Вы хотите всех их защищенных, можно измениться <<EOF
кому: <<'EOF'
.
Всякий раз, когда вы изменяете файл /etc/shadow
с помощью vipw
или аналогичной команды, он сохраняет предыдущую копию как /etc/shadow-
. Это а не резервная копия. Это просто фиксатор мгновенных ошибок.
Сохраняется как копия /etc/shadow и создается при изменениях. Там нечего настраивать.