如何使用expect和git clone?

发布于 2024-11-18 05:29:26 字数 304 浏览 1 评论 0原文

我正在尝试使用 Expect 在一行中输入密码来从我的私人 git 存储库进行克隆。

我正在尝试类似的事情:

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

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

谢谢,阿尔沙夫基·亚历山大

I'm trying to clone from my private git repository using expect to enter the password in one line.

I'm trying something like:

expect -c 'spawn git clone user@..*.*:/var/.../repository.git/; expect "(yes/no)?"; send "yes\n"; expect "password:"; send "my_password\n";interact'

But, it doesn't work.
What am I doing wrong? How can I fix the command line above?

Thanks, Arshavdki Alexander

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

燕归巢 2024-11-25 05:29:26

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

没有密码的 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.$

是的,该脚本看起来很笨拙,但(模数错误)它是独立的,对于自动化非常有用。

Why don't you just use something more secure than a password and simplify your life?

An ssh key with no password will be significantly more secure and not prompt at all.

If it must be 100% self-contained, then consider making the script output the SSH key, use it once, then remove it. (That should leave your security situation unchanged: the password is effectively in the script, which is acceptable for you.)

# 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.$

Yes the script looks unwieldy but (modulo bugs) it is self-contained pretty useful for automation.

╭⌒浅淡时光〆 2024-11-25 05:29:26

您可以通过直接在 url 中输入密码来避免使用 Expect。

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

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

但是,您可以省略密码:

git clone https://[email]受保护]/用户名/repository.git

git 会要求你输入密码,它不会保存在 .git/config 中,也不会保存在你的 bash 历史记录中

You could avoid using expect by directly entering password in the url

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

Please note - this causes your password to be stored in the .git files, making this a permanently insecure option.

However, you can leave out the password:

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

git will ask you for password and it will not be saved in .git/config nor in your bash history

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文