Итак, я являюсь промежуточным пользователем Linux, я только что обнаружил sed и хочу использовать его для автоматизации некоторых настроек во время моего обычного сценария установки / настройки.

Я пролистал все форумы, чтобы найти проблему, похожую на мою, однако я не видел, чтобы многие использовали такой же формат, как я, и я не уверен, почему. Я пришел к сценарию, который у меня есть ниже, просматривая ряд других сценариев sed и используя те, которые работали с тем, что я пытаюсь сделать. Затем я помещаю его в скрипт, и он выдает ошибку.

Я не могу найти проблему в этом сценарии sed:

sudo sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding no/g' "/etc/ssh/sshd_config"
sudo sed -i 's/#PermitRootLogin yes/PermitRootLogin no/g' "/etc/ssh/sshd_config"
sudo sed -i 's/X11Forwarding yes/#X11Forwarding yes/g' "/etc/ssh/sshd_config"
sudo sed -i 's/#StrictModes yes/StrictModes yes/g' "/etc/ssh/sshd_config"
sudo sed -i 's/#IgnoreRhosts yes/IgnoreRhosts yes/g' "/etc/ssh/sshd_config"
sudo sed -i 's/#HostbasedAuthentication no/HostbasedAuthentication no/g' "/etc/ssh/sshd_config"
sudo sed -i 's/#RhostsRSAAuthentication no/RhostsRSAAuthentication no/g' "/etc/ssh/sshd_config"

Я также написал команду как:

sudo sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding no/g;s/#PermitRootLogin yes/PermitRootLogin no/g;s/X11Forwarding yes/#X11Forwarding yes/g;s/#StrictModes yes/StrictModes yes/g;s/#IgnoreRhosts yes/IgnoreRhosts yes/g;s/#HostbasedAuthentication no/HostbasedAuthentication no/g;s/#RhostsRSAAuthentication no/RhostsRSAAuthentication no/g' "/etc/ssh/sshd_config"

Я получаю ту же ошибку:

: No such file or directoryhd_config

На обоих при запуске в сценарии с другими аргументами, которые все в комплекте без проблем. Я могу выполнить обе команды самостоятельно.

Полный скрипт:

#!/bin/bash
# Title:    Ubuntu Setup
# Author:   Matthew Williams
# Date:     10/31/2016
echo "***Ubuntu Setup Script Log***" `date +%d%m%Y_%H:%M.%S`  | tee UbuntuSetupLog.txt
sudo apt-get install -y libpcsclite1 pcscd pcsc-tools libssl-dev libpam0g-dev pkg-config libpcsclite-dev gdebi opensc unity-tweak-tool gnome-do openssh-server openssh-client byobu | tee -a UbuntuSetupLog.txt
echo "***Files Installed***" `date +%d%m%Y_%H:%M.%S`  | tee -a UbuntuSetupLog.txt
#
# Configure Networking / SSH
#
echo "***Configuring Networking/SSH***" | tee -a UbuntuSetupLog.txt
#
sudo sed -i 's/#AllowTcpForwarding yes/AllowTcpForwarding no/g;s/#PermitRootLogin yes/PermitRootLogin no/g;s/X11Forwarding yes/#X11Forwarding yes/g;s/#StrictModes yes/StrictModes yes/g;s/#IgnoreRhosts yes/IgnoreRhosts yes/g;s/#HostbasedAuthentication no/HostbasedAuthentication no/g;s/#RhostsRSAAuthentication no/RhostsRSAAuthentication no/g' "/etc/ssh/sshd_config"
sudo service sshd restart 2>&1 | tee -a UbuntuSetupLog.txt
#
echo "***Configuring Networking/SSH Complete***" `date +%d%m%Y_%H:%M.%S`  | tee -a UbuntuSetupLog.txt
#
echo "***Script Complete***"

Полный возврат:

***Ubuntu Setup Script Log*** 02112016_15:28.38
Reading package lists...
Building dependency tree...
Reading state information...
byobu is already the newest version (5.106-0ubuntu1).
libpam0g-dev is already the newest version (1.1.8-3.2ubuntu2).
libpcsclite-dev is already the newest version (1.8.14-1ubuntu1).
libpcsclite1 is already the newest version (1.8.14-1ubuntu1).
pkg-config is already the newest version (0.29.1-0ubuntu1).
gdebi is already the newest version (0.9.5.7ubuntu1).
gnome-do is already the newest version (0.95.3-5).
opensc is already the newest version (0.15.0-1ubuntu1).
pcsc-tools is already the newest version (1.4.25-1).
pcscd is already the newest version (1.8.14-1ubuntu1).
unity-tweak-tool is already the newest version (0.0.7ubuntu2).
libssl-dev is already the newest version (1.0.2g-1ubuntu4.5).
openssh-client is already the newest version (1:7.2p2-4ubuntu2.1).
openssh-server is already the newest version (1:7.2p2-4ubuntu2.1).
0 upgraded, 0 newly installed, 0 to remove and 9 not upgraded.
***Files Installed*** 02112016_15:28.38
***Configuring Networking/SSH***
: No such file or directoryhd_config
***Configuring Networking/SSH Complete*** 02112016_15:28.38
***Script Complete***

Мне нужен этот скрипт для автоматизации ряда других машин. Я знаю, что есть лучшие методы, и у каждого есть свой любимый способ. Мой единственный вопрос: что я делаю не так в sed? Я не уверен, что мне нужно сделать, чтобы изменить этот скрипт, и я около недели безрезультатно искал онлайн.

Я считаю, что ошибка в том, как я вызываю файл, но не знаю, как это сделать.

1 ответ1

1

Ваш скрипт был сохранен с использованием окончаний строк CR+LF (Windows). Оболочка не понимает их - она использует только LF в качестве маркера окончания строки, и CR становится частью команды. Таким образом:

  • Ваши журналы записываются в файл UbuntuSetupLog.txt<CR> . (К сожалению, CR и LF разрешены в именах файлов ...)
  • Ваши команды sed пытаются редактировать файл /etc/ssh/sshd_config<CR> , а байт CR отображает сообщение об ошибке при его печати (действуя как фактический возврат каретки).

Используйте dos2unix или frodos для конвертации скрипта. Или, если вы предпочитаете:

sed -i 's/\r$//' myscript.sh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .