如何通过 SSH 在 expect 中使用 CVS?
How to use CVS in expect through 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 [=11=])
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
我想指出,尽管 'company' 是一个占位符,但键入 ssh company
在我的控制台中工作得很好。
我的脚本有什么问题?它产生 "Invalid command name cvs_company.sh while executing 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 是一个很棒的工具,但在很多情况下您不需要使用它。
我找不到在测试服务器上自动将 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 [=11=])
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
我想指出,尽管 'company' 是一个占位符,但键入 ssh company
在我的控制台中工作得很好。
我的脚本有什么问题?它产生 "Invalid command name cvs_company.sh while executing 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 是一个很棒的工具,但在很多情况下您不需要使用它。