Как использовать CVS в ожидании через SSH?

Я не могу найти способ передать 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"

Есть ли правильный способ сделать это?


1
87
2

Ответы:

Решено

Похоже, вам нужно что-то вроде этого:

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 - фантастический инструмент, но во многих случаях вам не нужно его использовать.