如何使用expect和git clone?

时间:2011-06-30 07:16:44

标签: git expect

我正在尝试从我的私人git存储库中克隆,希望在一行中输入密码。

我正在尝试这样的事情:

  

期待-c'生成git clone user @ 。* *:/ var /.../ repository.git /;期待“(是/否)?”;发送“是\ n”;期待“密码:”;发送“my_password \ n”;互动'

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

谢谢,Arshavdki Alexander

2 个答案:

答案 0 :(得分:2)

为什么不使用比密码更安全的东西来简化生活?

没有密码的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.$$ "$@"
EOT
chmod +x /tmp/git_ssh.$$
export GIT_SSH=/tmp/git_ssh.$$

# Done!
git clone user@host:path/to/repo

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

是的,这个脚本看起来很笨重但是(模数错误)它是自包含的,对于自动化非常有用。

答案 1 :(得分:2)

您可以通过在网址

中直接输入密码来避免使用expect
git clone https://username:password@github.com/username/repository.git

请注意 - 这会导致您的密码存储在.git文件中,从而使其永久不安全。

但是,您可以省略密码:

git clone https://username@github.com/username/repository.git

git会询问您密码,它不会保存在.git / config中,也不会保存在您的bash历史记录中