SED “Nenhum tal arquivo ou diretório”

0

Então, eu sou um usuário Linux intermediário, acabei de descobrir o sed e quero usá-lo para automatizar algumas configurações durante meu script usual de instalação / configuração.

Eu percorri todos os fóruns para localizar um problema semelhante ao meu, mas não vi muitos usando o mesmo formato que eu e não sei por quê. Eu vim para o script que eu tenho abaixo através de uma série de outros scripts sed e usando aqueles que trabalharam com o que estou tentando fazer. Então eu coloco em um script e isso gera o erro.

Não consigo localizar o problema neste script 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"

Eu também escrevi o comando como:

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"

Eu recebo o mesmo erro:

: No such file or directoryhd_config

Em ambos, quando executado em um script com outros argumentos, todos concluídos sem problemas. Eu posso executar os dois comandos com sucesso por eles mesmos.

O script completo é:

#!/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***"

O retorno completo é:

***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***

Eu preciso deste script para automatizar várias outras máquinas. Eu sei que existem métodos melhores e todo mundo tem sua maneira favorita de fazer isso. Minha única pergunta é o que estou fazendo errado em sed? Não tenho certeza do que preciso fazer para mudar esse roteiro e tenho procurado on-line inutilmente por cerca de uma semana.

Acredito que o erro esteja na maneira como estou chamando o arquivo, mas não tenho certeza de como fazer isso.

    
por Matthew Williams 02.11.2016 / 22:58

1 resposta

1

Seu script foi salvo usando finais de linha CR + LF (Windows). O shell não entende esses - usa apenas LF como o marcador de fim de linha, e o CR se torna parte do comando . Assim:

  • Seus registros estão sendo gravados no arquivo UbuntuSetupLog.txt<CR> . (Infelizmente ambos CR e LF são permitidos em nomes de arquivos ...)
  • Seus comandos sed estão tentando editar o arquivo /etc/ssh/sshd_config<CR> e o byte CR manipula a mensagem de erro quando ela está sendo impressa (atuando como um retorno de carro real).

Use dos2unix ou frodos para converter o script. Ou se você preferir:

sed -i 's/\r$//' myscript.sh
    
por 03.11.2016 / 01:13