2012-08-14 36 views
1

我正在使用自动通预计bash.The代码;SSH-副本ID,并期望在bash

ssh-copy-id -i $SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP (here asks pass) 

VAR=$(expect -c" 
    expect "*?assword:*" 
    send "$REMOTE_HOST_PASSWD\r"; 
    send -- "\r" 
    expect eof 
    ") 

echo "$VAR" 

它仍然要求password.what是问题

解决:SSH-copy-id命令-i $ SSH_KEY_PATH_PUB $ REMOTE_HOST_USER @ $ REMOTE_HOST_IP必须在期望的那样阻止;

spawn ssh-copy-id -i $SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP 

和线

send "$REMOTE_HOST_PASSWD\r"; 

必须

send \"$REMOTE_HOST_PASSWD\r\"; 
+0

你见过这个问题吗? [在bash脚本中使用期望为SSH命令提供密码](http://stackoverflow.com/questions/4780893/use-expect-in-bash-script-to-provide-password-to-ssh-command?rq= 1) – Hasturkun 2012-08-14 12:11:15

+0

为什么不使用基于密钥的身份验证? – Anders 2012-08-14 13:19:34

回答

0
VAR=$(expect -c "expect '' \ 
    {eval spawn \ 
    ssh-copy-id -i $SSH_KEY_PATH_PUB [email protected]$REMOTE_HOST_IP; \ 
    interact -o -nobuffer -re .*assword.* return; \ 
    send "$REMOTE_HOST_PASSWD\r"; send -- "\r"; \ 
    expect eof;} ") 

echo "$VAR"