Answers:
ssh-add
,您需要ssh-agent
运行并按住私钥(好吧,回答更新后的问题,首先您要运行ssh-keygen
生成Jepublici 解释的公钥和私钥。将公钥放置在服务器上。如果没有密码,则应该使用密码短语。私钥中输入-text密码。但是,这样做时,实际上需要ssh-agent
如下所述。)
您希望ssh-agent
在登录时在后台运行。登录后,其想法是ssh-add
仅运行一次,以便为代理提供密码短语,以对密钥进行解码。然后,该代理程序就座落在内存中,您的密钥已解锁并加载,可以在每次在某处ssh使用时使用。
然后,所有ssh-family命令1将咨询代理并自动使用您的私钥。
在OSX(err,macOS),GNOME和KDE系统上,ssh-agent
通常会自动为您启动。如果像我一样,如果您也有Cygwin或其他Windows环境,但我肯定不会为您做这些,那么我将详细介绍。
从这里开始: man ssh-agent
。
有多种自动运行代理的方法。如手册页所述,您可以运行它,使其成为所有登录会话其他进程的父级。这样,它提供的环境变量将自动存在于您的所有shell中。当您(稍后)调用ssh-add
或ssh
两者都将有权访问代理,因为它们都具有带有魔术套接字路径名或其他名称的环境变量。
或者,您可以将代理作为普通子级运行,将环境设置保存在文件中,并在启动时在每个Shell中提供该文件的源。
我的OSX和Ubuntu系统会自动执行代理启动安装程序,因此我只需要运行ssh-add
一次即可。尝试运行ssh-add
并查看是否可以运行,如果可以,那么您只需在每次重新启动时执行一次即可。
我的Cygwin系统需要手动完成此操作,因此我在自己的系统上执行了此操作,.profile
并且有.bashrc
消息来源.profile
:
. .agent > /dev/null
ps -p $SSH_AGENT_PID | grep ssh-agent > /dev/null || {
ssh-agent > .agent
. .agent > /dev/null
}
该.agent
文件是由脚本自动创建的;它包含环境变量定义和导出。上面尝试获取.agent文件的源,然后尝试获取ps(1)
代理。如果不起作用,它将启动一个代理并创建一个新的代理文件。您也可以运行ssh-add
,如果运行失败,则启动代理。
sudo
带有正确的pam扩展名。
ssh-agent
使用它:eval `ssh-agent`
GitHub也有类似的问题,因为我使用的是HTTPS协议。要检查您使用的协议,只需运行
git config -l
然后看一下以开头的行remote.origin.url
。切换协议
git config remote.origin.url git@github.com:your_username/your_project.git
Permission denied
错误。
git remote set-url origin git@github.com:your_username/your_project.git
这是关于配置ssh而不是git。如果尚未使用,请使用ssh-keygen
(密码短语为空)创建密钥对。然后,使用将公共密钥复制到远程目标ssh-copy-id
。除非您需要多个密钥(例如,用于其他目的的带有密码短语的更安全的密钥),或者您正在进行一些非常奇怪的多身份验证,否则就这么简单:
ssh-keygen # enter a few times to accept defaults
ssh-copy-id -i ~/.ssh/id_rsa user@host
编辑:您实际上应该只阅读DigitalRoss的答案,但是:如果您将密钥与密码短语一起使用ssh-add <key-file>
,则需要使用将其添加到密钥中ssh-agent
(ssh-agent
如果您的发行版中没有正在运行的密钥,显然会启动一个密钥)。
ssh-agent
,因为他想绕过每次输入密码短语的问题。不能
ssh-agent
。+1给你!
ssh-*
所谓的使用密钥所需的密码短语。
如果您已使用HTTPS克隆(推荐),则:-
git config --global credential.helper cache
然后
git config --global credential.helper 'cache --timeout=2592000'
timeout = 2592000(30天,以秒为单位)以启用30天缓存(或您使用的任何套件)。
现在运行一个简单的git命令,该命令需要您的用户名和密码。
输入一次凭据,现在可以启用30天缓存。
使用任何git命令重试,现在您不需要任何凭据。
有关更多信息:- 在Git中缓存您的GitHub密码
注意:您需要Git 1.7.10或更高版本才能使用凭据帮助器。系统重启时,我们可能不得不再次输入密码。
将Muein的思想延伸给那些喜欢直接在git-bash或终端中运行命令来编辑文件的人。
转到项目的.git目录(本地计算机上的项目根目录),然后打开“ config”文件。然后查找[remote“ origin”]并按如下所示设置url配置:
[remote "origin"]
#the address part will be different depending upon the service you're using github, bitbucket, unfuddle etc.
url = git@github.com:<username>/<projectname>.git
我认为这里有两件事。第一个是普通的SSH身份验证要求用户输入帐户密码(根据sshd配置,将使用不同的方法对帐户密码进行身份验证)。
您可以避免使用证书输入该密码。使用证书,您仍然需要输入密码,但这一次是您的私钥密码(与帐户密码无关)。
为此,您可以按照steveth45指出的说明进行操作:
具有公钥认证。
如果要避免每次都输入证书的密码,则可以使用DigitalRoss指出的ssh-agent
确切的执行方式取决于Unix vs Windows,但是本质上,您需要在登录时在后台运行ssh-agent,然后在首次登录时运行ssh-add来为代理提供密码。然后,所有ssh-family命令都将咨询代理并自动获取您的密码。
从这里开始:man ssh-agent。
ssh-agent的唯一问题是,至少在* nix上,您必须在每个新的Shell上放置证书密码。然后证书被“加载”,您可以使用它来对ssh服务器进行身份验证,而无需输入任何密码。但这是在特定的外壳上。
使用钥匙串,您可以执行与ssh-agent相同的操作,但可以执行“系统级”操作。打开计算机电源后,您将打开一个外壳并输入证书的密码。然后,所有其他外壳将使用该“已加载”证书,并且在您重新启动PC之前,不会再询问您的密码。
Gnome有一个类似的应用程序,称为Gnome Keyring,它在您第一次使用证书时要求您输入证书的密码,然后将其安全地存储起来,因此不会再被询问。
AddKeysToAgent yes
.ssh / config 还有另一种方法。然后将其加载到内存中,直到您关闭计算机为止
如果您使用的是github,则他们有一个非常不错的教程,可以更清楚地解释它(至少对我来说)。
ssh-keygen -t rsa
当要求输入密码时,请将其保留为空白,即,只需按Enter。就如此容易!!
我不得不从不允许登录vie ssh密钥但只能使用用户/密码的服务器上克隆git repo。我发现没有办法配置Git插件以使用简单的用户名/密码组合,因此我在Linux构建机器上添加了以下shell命令作为预构建步骤,具体取决于工具的期望(apt-get install Expect):
这不是解决此问题的好方法,因为您的密码在JENKINS作业的配置和日志中显示为清晰的文字!仅当无法配置RSA密钥认证或其他可能的配置时,才使用它!
rm -rf $WORKSPACE &&
expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
AddKeysToAgent yes
在.ssh / config文件的顶部添加一行。当然,ssh-agent必须事先运行。如果它没有运行(按prep ssh-agent
),则只需运行它eval $(ssh-agent)
现在,该密钥已在系统范围内加载到内存中,您无需再次输入密码。
解决方案的来源是/ubuntu/362280/enter-ssh-passphrase-once/853578#853578
我一直在尝试避免一直输入密码,因为我在Windows上使用ssh。我所做的是修改.profile文件,以便在特定会话中输入密码短语之一。所以这是一段代码:
SSH_ENV="$HOME/.ssh/environment"
# start the ssh-agent
function start_agent {
echo "Initializing new SSH agent..."
# spawn ssh-agent
ssh-agent | sed 's/^echo/#echo/' > "$SSH_ENV"
echo succeeded
chmod 600 "$SSH_ENV"
. "$SSH_ENV" > /dev/null
ssh-add
}
# test for identities
function test_identities {
# test whether standard identities have been added to the agent already
ssh-add -l | grep "The agent has no identities" > /dev/null
if [ $? -eq 0 ]; then
ssh-add
# $SSH_AUTH_SOCK broken so we start a new proper agent
if [ $? -eq 2 ];then
start_agent
fi
fi
}
# check for running ssh-agent with proper $SSH_AGENT_PID
if [ -n "$SSH_AGENT_PID" ]; then
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
fi
# if $SSH_AGENT_PID is not properly set, we might be able to load one from
# $SSH_ENV
else
if [ -f "$SSH_ENV" ]; then
. "$SSH_ENV" > /dev/null
fi
ps -fU$USER | grep "$SSH_AGENT_PID" | grep ssh-agent > /dev/null
if [ $? -eq 0 ]; then
test_identities
else
start_agent
fi
fi
因此,我每次在会话中输入我的密码。
我尝试了所有这些建议以及更多建议,以便可以从我的AWS实例进行git clone。没事。我终于绝望地作弊:我将id_rsa.pub的内容复制到本地计算机上,并将其附加到我的AWS实例上的〜/ .ssh / known_hosts中。