как отправить специальные символы в сценарии ожидания?

Advertencia:-deleteno -estándar (no portátil )y riesgoso cuando se usa gfind.

Recuerde que rmtiene algunas restricciones de seguridad, pero la página de manual de gfindno menciona tales restricciones para -delete. Por lo tanto, recomiendo utilizar el método oficial:

find /var/log/mbackups -mtime +7 -type f -exec rm {} +

Esto no es ni siquiera más lento que el método estándar no -usando -delete.

1
22.07.2020, 18:31
1 ответ

После долгих поисков я понял, что не могу использовать expectсо специальным символом, если я не сбежал. Преобразование пароля со специальными символами для использования со сценарием ожидания дает короткий сценарий Perl, который позволил мне программно обрабатывать специальные символы в динамических паролях.

#/bin/sh
pstr='$x%y!zpass' # plain, un-escaped string
estr=$(perl -e 'print quotemeta shift(@ARGV)' "${pstr}")
echo ${estr}      # show escaped string

производит:

\$x\%y\!zpass

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

Сценарий Bash:passwordlessSSH.sh

#/bin/sh
hostname=$1
pstr=$2 # plain, un-escaped string
estr=$(perl -e 'print quotemeta shift(@ARGV)' "${pstr}")
echo ${estr}      # show escaped string
/your/script/location/passwordlessSSH.exp $hostname ${estr}

Ожидаемый сценарий:passwordlessSSH.exp

#!/usr/bin/expect -f
set host [lindex $argv 0]
set pass [lindex $argv 1]

spawn ssh-copy-id -i /home/hdpsvcs/.ssh/id_rsa.pub hdpsvcs@$host
expect {
  "yes" {
    send "yes\r"
   }
    "assword" {
    send "$pass \r"
}
exit 0

Выполнить:Просто выполнить скрипт bash

./passwordlessSSH.sh $hostname "$password"

2
28.04.2021, 23:31

Теги

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