2011-06-30 88 views
3

我想从我的私人git仓库克隆使用期望在一行中输入密码。如何使用expect和git clone?

我想是这样的:

预计-c“重生混帐克隆用户@。* *:/ var /.../ repository.git /;期望“(是/否)?”;发送“是\ n”;期待“密码:”;发送“my_password \ n”;交互'

但是,它不起作用。 我在做什么错?我如何修复上面的命令行?

感谢,Arshavdki亚历山大

+1

之所以想到不能按预期工作,是因为SSH是*正确*直接写入到终端,而不是标准输出或标准错误。 – Arafangion

回答

4

你为什么不只是使用一种比密码更安全,并简化你的生活?

一个没有密码的ssh密钥将是显着更安全,而且根本不提示。

如果它必须是100%独立的,那么考虑让脚本输出SSH密钥,使用它一次,然后将其删除。 (这应该离开你的安全形势不变:密码实际上是在脚本中,这是你可以接受的。)

# Output SSH key for no-password login. (Could use mktemp instead) 
cat > /tmp/ssh_key.$$ <<EOT 
-----BEGIN RSA PRIVATE KEY----- 
blahblahblah 
-----END RSA PRIVATE KEY----- 
EOT 

# Make a SSH wrapper to do the right thing 
cat > /tmp/git_ssh.$$ <<EOT 
ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -i /tmp/ssh_key.$$ "[email protected]" 
EOT 
chmod +x /tmp/git_ssh.$$ 
export GIT_SSH=/tmp/git_ssh.$$ 

# Done! 
git clone [email protected]:path/to/repo 

# Cleanup 
rm -f /tmp/git_ssh.$$ /tmp/ssh_key.$$ 

是剧本看起来笨重而且(模数错误)它是自包含的自动化非常有用。

+0

问题是我正在编写一个部署脚本,这应该从脚本运行。 – alexarsh

+1

...所有更多的理由让它更安全和自动化,对吗?也许你应该检查一下ssh的github指南? http://help.github.com/set-up-git-redirect/ – Dustin

+2

你能回答我的问题吗? – alexarsh

1

你可以尽量避免使用通过在URL中直接输入密码预计

git clone https://username:[email protected]/username/repository.git