> Start the ssh-agent in the background-6ren">
gpt4 book ai didi

bash - 密码输入后,bash脚本不会生效

转载 作者:行者123 更新时间:2023-12-02 14:16:53 27 4
gpt4 key购买 nike

我不想自动登录到ssh代理,而只能在'sh'文件中有效执行简单脚本:

#!/bin/bash
clear
echo " >> Start the ssh-agent in the background."
eval $(ssh-agent -s)
echo " >> Add SSH private key to the ssh-agent"
ssh-add ~/.ssh/id_rsa
echo " >> List of ssh agents"
ssh-add -l
echo " >> Attempts ssh to GitHub"
ssh -T git@github.com

它确实会触发密码请求并确实等待输入,即使不是在主目录中也是如此。
git通知“已添加身份:”和“您已成功通过身份验证”

但是问题是在尝试与Github通信后-'git push'或'pull'命令没有任何积极作用:
sign_and_send_pubkey: signing failed: agent refused operation
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

在该问题之后,我可以从键盘键入相同的命令。
ssh-add ~/.ssh/id_rsa

输入密码,然后它就能使我成功与Github通信。上面的脚本有什么问题?

我的情况:
OS name: "linux", version: "4.15.0-76-generic", arch: "amd64", family: "unix"

最佳答案

ssh-agent通过设置一堆环境变量来告诉 shell 程序如何与其通信来工作。它将它们打印到STDOUT,并且eval $(ssh-agent -s)将它们转换为环境变量。重要的是SSH_AUTH_SOCK,它指向用于与代理进行通信的套接字文件。

$ echo $SSH_AUTH_SOCK
/tmp/path/to/the/socket

环境变量仅在当前进程及其子进程中保留。您的Shell程序在新进程中执行。在Shell程序中设置的任何环境变量都会与Shell程序一起消失。您的 shell 将不知道如何与代理说话。

您有两种选择。

首先,可以执行 source而不是执行Shell程序。这会在您当前的shell中将其作为一系列shell命令运行,就像您键入它们一样。脚本设置的环境变量将保留。

其次,更好的方法是在登录时启动 ssh-agent。有 many ways to do this depending on your operating system。您可能已经在运行一个。检查 $SSH_AUTH_SOCK

PS echo " >> List of ssh agents"应该是 echo " >> List of ssh keys"

关于bash - 密码输入后,bash脚本不会生效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60101832/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com