Я не могу найти способ передать CVS пароль для автоматического запуска на тестовом сервере. Пытаюсь сделать скрипт expect
.
У меня есть псевдоним ssh, для которого я сделал ssh-copy-id
, так что с паролем для ssh
проблем не возникает.
Я хотел бы подражать:
ssh name;
run_remote_script.sh
#(which triggers cvs update at the good place. Nb, the server has a MOTD)
expect "Password:"
send "${CVS_REMOTE_PASSWORD}\n" #enter the password
Я сделал это:
#!/bin/bash
SOFT=$(basename $0)
if [ -z ${CVS_REMOTE_PASSWORD+x} ];then
echo "$SOFT : Undefined variable \$CVS_REMOTE_PASSWORD"
fi
hostname = "company"
/usr/bin/expect <<EOD
spawn ssh $hostname
cvs_company.sh
expect "Password:"
send "$CVS_REMOTE_PASSWORD\n"
interact
EOD
Я хотел бы отметить, что ввод ssh company
, хотя «компания» является заполнителем, в моей консоли работает отлично.
Что не так с моим сценарием? Это дает "Неверное имя команды cvs_company.sh при выполнении cvs_company.sh"
Есть ли правильный способ сделать это?
Похоже, вам нужно что-то вроде этого:
expect << EOD
spawn ssh $hostname
expect "YOUR-SHELL-PROMPT"
send "cvs_company.sh\r"
expect "Password:"
send "$CVS_REMOTE_PASSWORD\r"
interact
EOD
Я не уверен в том, как работает аутентификация CVS, но посмотрим, сможете ли вы это сделать:
ssh $hostname "echo '$CVS_REMOTE_PASSWORD' | cvs_company.sh"
Предполагается, что ваш пароль не содержит одинарных кавычек. Если это так, есть простые, но уродливые обходные пути.
Expect - фантастический инструмент, но во многих случаях вам не нужно его использовать.