提问人:Andrzej Więcławski 提问时间:2/7/2020 最后编辑:SchwernAndrzej Więcławski 更新时间:2/7/2020 访问量:172
Bash 脚本不采取 efect ater passphrase enter
Bash script don't take efect ater passphrase enter
问:
我不想自动登录 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 [email protected]
它确实会触发密码请求并等待输入密码,即使不在主目录中也是如此。 git inform 'Identity added:' 和 'You've successfully authenticated'
但问题是在尝试与 Github 通信之后 - 'git push' 或 'pull' 命令没有任何积极效果:
sign_and_send_pubkey: signing failed: agent refused operation
[email protected]: 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 并将它们转换为环境变量。重要的一个是SSH_AUTH_SOCK它指向用于与代理通信的套接字文件。eval $(ssh-agent -s)
$ echo $SSH_AUTH_SOCK
/tmp/path/to/the/socket
环境变量仅保留当前进程及其子进程。您的 shell 程序在新进程中执行。shell 程序中设置的任何环境变量都与 shell 程序一起死亡。你的壳体将不知道如何与代理交谈。
您有两种选择。
首先,您可以执行 shell 程序,而不是执行 shell 程序。这会在当前 shell 中将其作为一系列 shell 命令运行,就像您键入它们一样。脚本设置的环境变量将保留。source
其次,更好的是,在登录时开始。有很多方法可以执行此操作,具体取决于您的操作系统。您可能已经有一个在运行。检查。ssh-agent
$SSH_AUTH_SOCK
PS应该是echo " >> List of ssh agents"
echo " >> List of ssh keys"
我能够用Funtoo钥匙串解决这个问题。我在.bash_profile中调用了钥匙串,这样我第一次登录时,它就会要求输入密码,但不是每次都要求输入密码。它可以选择在代理中要求某些密钥,并且仅在它们不存在时才提示您。
以下是我.bash_profile中的相关行:
keychain --inherit any ~/.ssh/id_rsa_github
. ~/.keychain/$HOSTNAME-sh
该选项告诉钥匙串继承任何已经存在的 ssh-agent(例如系统代理,或者已经运行的代理,或者 gnome-keyring 或者你拥有的什么)。如果不存在,它将启动一个。然后钥匙串在我的主目录()中编写一个shell脚本,我的源(使用上面的命令)。钥匙串的第二个参数(如上)是需要加载的密钥。首次运行钥匙串时,它会发现密钥不在代理中,因此会提示用户输入密码。随后运行的任何时间,它都会检测到密钥是否存在,并且不会提示用户。--inherit any
~/.keychain/$HOSTNAME-sh
.bash_profile
.
~/.ssh/id_rsa_github
评论
eval $(ssh-agent -s)