我有一个受密码保护的私钥,可以通过SSH访问服务器。
我有2台Linux(ubuntu 10.04)机器,并且ssh-add命令的行为在两者中均不同。
在一台机器上,一旦我使用“ ssh-add .ssh / identity”并输入了密码,便会永久添加密钥,即,每次我关闭计算机并再次登录时,密钥都已添加。
在另一种方法中,每次登录时都必须添加密钥。
据我所记得,我在两者上都做过同样的事情。唯一的区别是密钥是在永久添加的密钥上创建的。
有谁知道如何将其永久添加到另一台计算机上?
我有一个受密码保护的私钥,可以通过SSH访问服务器。
我有2台Linux(ubuntu 10.04)机器,并且ssh-add命令的行为在两者中均不同。
在一台机器上,一旦我使用“ ssh-add .ssh / identity”并输入了密码,便会永久添加密钥,即,每次我关闭计算机并再次登录时,密钥都已添加。
在另一种方法中,每次登录时都必须添加密钥。
据我所记得,我在两者上都做过同样的事情。唯一的区别是密钥是在永久添加的密钥上创建的。
有谁知道如何将其永久添加到另一台计算机上?
Answers:
一种解决方案是通过将密钥文件添加到文件中来强制它们永久保存~/.ssh/config
:
IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer
如果〜/ .ssh目录中没有“ config”文件,则应创建一个。它不需要root权限,因此只需:
nano ~/.ssh/config
...并根据您的要求输入以上各行。
为此,文件必须具有chmod600。您可以使用命令chmod 600 ~/.ssh/config
。
如果您希望计算机上的所有用户都使用密钥,请将这些行放入其中/etc/ssh/ssh_config
,并将密钥放入所有人都可以访问的文件夹中。
另外,如果要设置特定于一台主机的密钥,则可以在〜/ .ssh / config中执行以下操作:
Host github.com
User git
IdentityFile ~/.ssh/githubKey
当您有许多身份时,这样做的好处是服务器不会拒绝您,因为您首先尝试了错误的身份。仅尝试特定的身份。
chmod 600 config
ssh-add ~/.ssh/gitHubKey
,它会记住您的关键密码。我建议的解决方案是在重新启动后将其永久设置。
在Mac OS X Lion下,这对我没有解决相同的问题。我最终添加:
ssh-add ~/.ssh/id_rsa &>/dev/null
对于我的.zshrc(但是.profile也可以),它似乎已经解决了。
(如此处的建议:http : //geek.michaelgrace.org/2011/09/permanently-add-ssh-key-ssh-add/)
ForwardAgent yes
到my中.ssh/config
)完美地解决了该问题。事实证明,这可能只是ssh-add &>/dev/null
因为默认行为ssh-add
是添加在.ssh
文件夹中找到的键。
-K
将密钥添加到OS X的钥匙串中,OS X GUI用来对外部服务器进行身份验证。该问题中的发布者正在通过SSH隧道进行连接,但仍仅与远程服务器连接。A- [SSH隧道]-> B我所处的情况是我在远程服务器上,但希望身份验证针对我的家庭系统上的凭据。A < - [验证] - 乙 - [连接] - “ç所以-K
实际上不帮助,但对于其他Q.很好的解决方案
我通过对ssh-add使用-K选项解决了Mac OSX(10.10)上的问题:
ssh-add -K ~/.ssh/your_private_key
对于macOS 10.12及更高版本,您需要按如下所述另外编辑ssh配置:https : //github.com/jirsbek/SSH-keys-in-macOS-Sierra-keychain
man ssh-add
macOS High Sierra上的描述,ssh-add -K
会将密码短语保存到钥匙串中,并且在重启后,只需使用即可ssh-add -A
,它不需要您输入密码短语。
只需添加钥匙串即可,如Ubuntu快速提示 https://help.ubuntu.com/community/QuickTips中所述
什么
不必不断启动ssh-agent和ssh-add,而是可以使用钥匙串来管理ssh密钥。要安装钥匙串,只需单击此处,或使用Synaptic从命令行执行作业或apt-get。
命令行
安装文件的另一种方法是打开终端(“应用程序”->“附件”->“终端”),然后键入:
sudo apt-get install keychain
编辑档案
然后,应将以下行添加到$ {HOME} /。bashrc或/etc/bash.bashrc中:
keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
.
是source
我尝试了@Aaron的解决方案,但它对我而言并不奏效,因为每次我在终端中打开新标签时,它都会重新添加我的密钥。因此,我对其进行了一些修改(请注意,我的大多数键也是受密码保护的,因此我不能仅将输出发送到/ dev / null):
added_keys=`ssh-add -l`
if [ ! $(echo $added_keys | grep -o -e my_key) ]; then
ssh-add "$HOME/.ssh/my_key"
fi
这样做是为了检查ssh-add -l
特定密钥的输出(列出已添加的所有密钥),如果找不到,则将其添加ssh-add
。
现在,当我第一次打开终端时,系统会要求我输入私钥的密码,直到重新启动(或注销-我没有检查)计算机后,我才再次被问到。
因为我有一堆键,所以我将输出存储ssh-add -l
在变量中以提高性能(至少我猜它会提高性能:))
PS:我在linux上,并且此代码已保存到我的~/.bashrc
文件中-如果您在Mac OS X上,则假定您应该将其添加到.zshrc
或.profile
编辑:正如@Aaron在评论中指出的那样,该.zshrc
文件是从zsh
shell中使用的-因此,如果您不使用它(如果不确定,那么很可能是使用了它bash
),此代码应转到您的.bashrc
文件。
.zshrc
是用于zsh
shell的,我用代替bash
。如果您使用的bash
是Mac OS X(默认设置),它也将.bashrc
存在。
ssh-add -l
返回码echo $?
可用于决定是否添加关键与否。我的Linux计算机使用bash,ssh-add -l
不会输出密钥文件名。返回代码始终有效。
我在Ubuntu 16.04上遇到了同样的问题:某些键被永久添加,而另一些则必须ssh-add
在每个会话中执行。我发现,永久添加的密钥位于私钥和公钥中~/.ssh
,而每次会话中忘记的密钥在~/.ssh
dir中只有私钥。因此,解决方法很简单:你应该复制这两个私钥和公钥来~/.ssh
执行前ssh-add
。
PS:据我从Gnome Wiki所了解,我的方法可以使用gnome-keyring工具,该工具是Gnome桌面环境的一部分。因此,仅当您使用Gnome或基于Gnome的DE时,我的方法才可能起作用。
在Ubuntu 14.04(可能更早,也许仍然)上,您甚至不需要控制台:
seahorse
或启动您寻找“钥匙”的东西ssh
将通过代理获取身份(即密钥)ssh
使用-A
或将其设置为默认值
这对我有用。
ssh-agent /bin/sh
ssh-add /path/to/your/key
对于使用Fish shell的用户,可以使用以下函数,然后在中~/.config/fish/config.fish
或在单独的配置文件中调用它~/.config/fish/conf.d/loadsshkeys.fish
。它将以id_rsa开头的所有密钥加载到中ssh-agent
。
# Load all ssh keys that start with "id_rsa"
function loadsshkeys
set added_keys (ssh-add -l)
for key in (find ~/.ssh/ -not -name "*.pub" -a -iname "id_rsa*")
if test ! (echo $added_keys | grep -o -e $key)
ssh-add "$key"
end
end
end
# Call the function to run it.
loadsshkeys
如果要ssh-agent
在打开终端时自动启动,可以使用tuvistavie / fish-ssh-agent来执行此操作。