Estou tentando anexar PS1 no sistema remoto /etc/profile
. Agora preciso anexar essa string em mais de 70 servidores, portanto, usando, ssh
anexarei essa string PS1 em todos os servidores. Mas quando tento enviar o PS1 ele trava e tenho que matar o comando
Este é o comando
ssh -v admin@remserv "sed '/002/a \ PS1=" \[\e[31m\]\n------------------------------------------------------------------------------------------------------------------------------ \n\n[\u@\h \W]\\$ - \# \[\e[0m\] " /etc/profile' "
O que estou perdendo aqui ?
Comando editado com base na sugestão
> ssh -vt admin@remserv printf "%s\n" "sudo sed -i.bak '/002/a \
> PS1="
> '\[\e[31m\']'\'n------------------------------------------------------------------------------------------------------------------------------ '\'n'\'n'[\u@\h \W']'\\'$ - '\'# '\[\e[0m\'] " /etc/profile' "
Responder1
ssh ... "sed '/002/a \ PS1=" \[\e[31m\]\n--...- \# \[\e[0m\] " /etc/profile' "
^ ^ ^ ^
Você tem duas aspas duplas sem aspas dentro da string entre aspas, elas serão removidas pelo shell (no lado local da conexão ssh). Além disso, as aspas simples internas parecem abranger o sed
comando e o nome do arquivo; portanto, depois que o shell remoto tratar as aspas, sed
obterá um argumento com /002/a \ ... /etc/profile
. Na verdade, isso aparece na saída do ssh na sua imagem.
(Bem, pelo menos é isso que me vem à mente, problemas com aspas duplas não funcionam bem no meu cérebro, pelo menos sem café suficiente.)
Você deve ser capaz de depurar isso executando algo como
ssh somewhere printf '"%s\n"' "sed '/002/... /etc/profile' "
O printf
irá imprimir os argumentos obtidos, um por linha, então é mais fácil ver onde a string está realmente dividida (echo se juntaria a espaços, então foo
, bar
, teria a mesma aparência que foo bar
). Coloque aspas duplas na string de formato para manter a barra invertida intacta no controle remoto.
Responder2
Ok, resolva isso usando caracteres '\'
Comando Correto
for i in `cat serverslist`; do ssh -t admin@$i "sudo sed -i.bak '/002/a \ PS1="\" '\\'['\\'e[31m'\\']'\\n'------------------------------------------------------------------------------------------------------------------------------ '\\'n'\\'n['\\'u@'\\'h '\(''\\'W'\)']'\\''\\'$ - '\\'# '\\'['\\'e[0m'\\'] \"" ' /etc/profile " ;done ;