通过SSHconfigurationGitlogin一次
我通过ssh克隆了我的git仓库。 所以,每当我通过推或拉与原始主人沟通,我都必须重新input密码。 我怎样才能configurationGIT,使我不需要多次input密码?
试试ssh-add
,你需要ssh-agent
运行并持有你的私钥
(好吧,回答更新的问题,你首先运行ssh-keygen
来生成一个公钥和私钥,如Jeutti 解释的那样:你把公钥和私钥放到服务器上,如果你没有这个等价的话,你应该使用密码在你的私钥中有一个明文密码,但是当你这样做的时候,你需要把ssh-agent
作为一个实际的事情,如下所述)。
您希望在login时在后台运行ssh-agent
。login后,想法是运行ssh-add
一次,只能运行一次,以便为代理程序提供密码,以解密密钥。 然后,代理人只需将您的密钥解锁并加载到内存中,每当您在某处ssh时就可以使用。
所有的ssh-family命令1将会查询代理并自动地使用你的私钥。
在OSX(err, macOS ),GNOME和KDE系统上,通常会为您自动启动ssh-agent
。 我会仔细研究一下这个细节,就像我一样,你也有一个Cygwin或者其他Windows环境,这个环境当然不是为你做的。
从这里开始: man ssh-agent
。
有多种方法可以自动运行代理。 正如手册页所解释的那样,您可以运行它,以便它是所有login会话的其他进程的父代。 这样,它提供的环境variables将自动地在你所有的shell中。 当(稍后)调用ssh-add
或ssh
两者都可以访问代理,因为它们都具有带有魔术套接字path名的环境variables。
或者,您可以像普通孩子一样运行代理,将环境设置保存在一个文件中,并在启动时在每个shell中input该文件。
我的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
文件是由脚本自动创build的; 它包含环境variables定义和导出。 以上尝试获取.agent文件,然后尝试ps(1)
代理。 如果不起作用,则启动代理并创build新的代理文件。 你也可以运行ssh-add
,如果失败则启动代理。
1.甚至有本地和远程的sudo
与正确的pam扩展。
有一个与GitHub类似的问题。 这是因为我使用HTTPS协议而发生的。 要检查你使用的协议只是运行
git config -l
并查看以“remote.origin.url”开头的行。 切换你的协议
git config remote.origin.url git@github.com:your_username/your_project.git
我希望它有帮助。
这是关于configurationSSH,而不是混帐。 如果还没有,则应该使用ssh-keygen
(带空白密码)来创build一个密钥对。 然后,使用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
if你的发行版本还没有为你运行)。
确保在克隆存储库时,使用SSH URL而不是HTTPS; 在回购的克隆URL框中,在复制URL之前selectSSH协议。 见下图:
对于那些喜欢直接通过git-bash或者terminal中的运行命令编辑文件的人来说,扩展了Muein的想法。
转到项目的.git目录(本地计算机上的项目根目录),然后打开“configuration”文件。 然后查找[remote“origin”]并设置urlconfiguration,如下所示:
[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
我认为这里有两个不同的东西。 第一个是普通的SSHauthentication要求用户input帐号密码(根据sshdconfiguration,帐号密码将通过不同的方法进行authentication)。
您可以避免使用证书来input密码。 对于证书,您仍然需要input密码,但这次是您的私钥密码(与账户密码无关)。
要做到这一点,你可以按照steveth45指出的指示:
公钥authentication 。
如果您想避免每次都input证书的密码,那么您可以使用ssh-agent,正如DigitalRoss所指出的那样
确切的做法取决于Unix和Windows,但实际上,您需要在login后在后台运行ssh-agent,然后在第一次login时,运行ssh-add为代理提供密码。 所有的ssh-family命令将会查询代理并自动提取你的密码。
从这里开始:man ssh-agent。
ssh-agent唯一的问题是,至less在* nix上,你必须把证书密码放在每个新的shell中。 然后证书被“加载”,您可以使用它来对SSH服务器进行身份validation,而无需input任何密码。 但是这是在那个特定的shell上。
使用钥匙串,您可以执行与ssh-agent相同的function,但是“系统范围”。 打开计算机后,打开一个shell并input证书的密码。 然后,所有其他shell将使用该“已加载”证书,并且在重新启动PC之前,您的密码将不会再被询问。
Gnome有一个类似的应用程序,叫做Gnome Keyring ,它在你第一次使用它的时候要求你的证书密码,然后安全地存储它,这样你就不会再被问到了。
如果你使用github,他们有一个非常好的教程,可以更清楚地解释它(至less对我来说)。
ssh-keygen -t rsa
当被要求input密码时,请保持空白,即按回车。 就如此容易!!
试试从你推动的框中
ssh git@github.com
然后,你应该从github得到一个欢迎的回应,然后将被罚款。
我一直试图避免input密码,因为我在Windows上使用ssh。 我所做的是修改我的.profile文件,以便我在特定的会话中input我的密码。 所以这是一段代码:
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
所以这个我在会话中input一次密码
在.ssh / config文件的顶部添加一行AddKeysToAgent yes
。 当然,ssh-agent必须事先运行。 如果没有运行(通过prep ssh-agent
检查),那么只需运行它eval $(ssh-agent)
现在,系统将密钥加载到内存中,而不必再次input密码。
解决scheme的来源是https://askubuntu.com/questions/362280/enter-ssh-passphrase-once/853578#853578
我不得不从一个服务器克隆git仓库,不允许loginvie ssh密钥,但只有一个用户名/密码。 我发现没有办法configurationGit插件来使用简单的用户/密码组合,所以我添加了下面的shell命令作为一个Linux构build机器上的预构build步骤,这取决于工具expect(apt-get install expect):
这不是解决这个问题的好方法,因为你的密码在JENKINS作业的configuration和日志中显示为明文! 只有在没有configurationRSA密钥authentication或其他configuration的可能的情况下才使用它!
rm -rf $WORKSPACE && expect -c 'set timeout -1; spawn git clone USER@MYHOST:/MYPATH/MYREPO.git $WORKSPACE; expect "password:" {send "MYPASSWORD\r"}; expect eof'
我尝试了所有这些build议和更多,只是让我可以从我的AWS实例克隆克隆。 没有工作。 我终于无奈之下欺骗了:我在本地机器上复制了id_rsa.pub的内容,并将其附加到我的AWS实例上的〜/ .ssh / known_hosts中。