关闭。此问题不符合 Stack Overflow 准则。它目前不接受答案。我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为 Stack Overflow 的主题。 3年前关闭。改进这个问题
我有一个受密码保护的私钥,可以通过 SSH 访问服务器。
我有 2 台 linux (ubuntu 10.04) 机器,并且 ssh-add 命令的行为在它们中都不同。
在一台机器上,一旦我使用“ssh-add .ssh/identity”并输入我的密码,密钥就会被永久添加,即每次我关闭计算机并再次登录时,密钥已经被添加。
在另一个中,我每次登录时都必须添加密钥。
据我记得,我对两者都做了同样的事情。唯一的区别是密钥是在永久添加的密钥上创建的。
有谁知道如何将它永久添加到另一台机器上?
一种解决方案是通过将密钥文件添加到您的 ~/.ssh/config
文件中来强制永久保留密钥文件:
IdentityFile ~/.ssh/gitHubKey
IdentityFile ~/.ssh/id_rsa_buhlServer
如果您在 ~/.ssh 目录中没有“配置”文件,那么您应该创建一个。它不需要root权限,所以很简单:
nano ~/.ssh/config
...并根据您的要求输入上面的行。
为此,该文件需要具有 chmod 600。您可以使用命令 chmod 600 ~/.ssh/config
。
如果您希望计算机上的所有用户都使用密钥,请将这些行放入 /etc/ssh/ssh_config
并将密钥放入所有人都可以访问的文件夹中。
此外,如果您想设置特定于一台主机的密钥,您可以在 ~/.ssh/config 中执行以下操作:
Host github.com
User git
IdentityFile ~/.ssh/githubKey
当您有许多身份而服务器不会因为您首先尝试错误的身份而拒绝您时,这具有优势。只会尝试特定的身份。
我通过使用 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
,ssh-add -K
会将密码保存到钥匙串中,重新启动后,只需使用 ssh-add -A
,它不需要您输入密码。
在 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
添加到我的 .ssh/config
)出色地解决了该问题。事实证明,它可能只是 ssh-add &>/dev/null
,因为 ssh-add
的默认行为似乎是添加它在 .ssh
文件夹中找到的键。
-K
将密钥添加到 OS X 的钥匙串,OS X GUI 使用该钥匙串对外部服务器进行身份验证。 Q 中的海报正在通过 SSH 隧道连接,但仍只是连接到远程服务器。 A-[SSH Tunnel]->B 我的情况是我在远程服务器上,但希望身份验证针对我的家庭系统上的凭据。 A <-[Auth]-B-[Connect]->C 所以 -K
实际上并没有帮助,但对于另一个 Q 来说是一个很好的解决方案。
unknown option -- K
(我承认我不知道为什么我什至需要这样做......)
只需添加钥匙串,如 Ubuntu 快速提示 https://help.ubuntu.com/community/QuickTips 中所述
什么
可以使用钥匙串来管理您的 ssh 密钥,而不是不断地启动 ssh-agent 和 ssh-add。要安装钥匙串,您只需单击此处,或使用 Synaptic 来完成这项工作或从命令行 apt-get。
命令行
另一种安装文件的方法是打开终端(Application->Accessories->Terminal)并输入:
sudo apt-get install keychain
编辑文件
然后,您应该将以下行添加到您的 ${HOME}/.bashrc 或 /etc/bash.bashrc:
keychain id_rsa id_dsa
. ~/.keychain/`uname -n`-sh
.
是 source
的别名
uname -n
-sh 存在?
id_dsa
是什么?我搜索了这个页面,只在这个答案和 another 中看到了这一点,但在 original question 中没有看到。这只是像 id_rsa
这样的另一个键,因为正在设置 2 个键吗?
我尝试了@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
外壳中使用的 - 所以如果你不使用它(如果你不确定,那么很可能你正在使用bash
),此代码应转到您的 .bashrc
文件。
.zshrc
用于 zsh
shell,我使用它来代替 bash
。如果您在 Mac OS X(默认)上使用 bash
,那么它也应该是 .bashrc
。
ssh-add -l
之后的返回码echo $?
可以用来决定是否添加key。我使用 bash 的 linux 机器,ssh-add -l
不会输出密钥文件名。返回代码始终有效。
我在 Ubuntu 16.04 上遇到了同样的问题:一些密钥是永久添加的,而另一些密钥我必须在每个会话中执行 ssh-add
。我发现永久添加的密钥在 ~/.ssh
中具有私钥和公钥,而在每个会话中忘记的密钥在 ~/.ssh
目录中只有私钥。所以解决方案很简单:您应该在执行 ssh-add
之前将 both 私钥和公钥复制到 ~/.ssh
。
PS: 据我从 Gnome wiki 了解到,我的方法之所以有效,要归功于 gnome-keyring 工具,它是 Gnome 桌面环境的一部分。因此,我的方法可能仅在您使用 Gnome 或基于 Gnome 的 DE 时才有效。
就我而言,解决方案是:
配置文件的权限应该是 600。 chmod 600 config
正如generalopinion在上面的评论中提到的
无需触摸配置文件内容。
我使用两个 id_rsa 密钥运行 Ubuntu。 (一个个人的工作)。 ssh-add 每次都会记住一把钥匙(个人一把)而忘记公司一把。
检查两者之间的差异,我看到我的个人密钥有 400 个权限,而公司的密钥有 600 个权限。 (有 u+w)。从公司密钥中删除用户写入权限(uw 或设置为 400)解决了我的问题。 ssh-add 现在记住这两个键。
在 Ubuntu 14.04(可能更早,可能仍然)上,您甚至不需要控制台:
启动 seahorse 或启动你找到的搜索“key”的东西
在那里创建一个 SSH 密钥(或导入一个) 无需将密码留空 它提供给您甚至可以将公钥推送到服务器(或更多)
无需将密码留空
甚至可以将公钥推送到服务器(或更多)
您最终将运行 ssh-agent 并加载此密钥,但已锁定
使用 ssh 将通过代理获取身份(即密钥)
在会话期间首次使用时,将检查密码,您可以选择在登录时自动解锁密钥,这意味着登录身份验证将用于包装密钥的密码
您可以选择在登录时自动解锁密钥
这意味着登录身份验证将用于包装密钥的密码
注意:如果您想转发您的身份(即代理转发),请使用 -A 调用您的 ssh 或将其设为默认值,否则您无法在稍后登录到第三台机器的机器上使用该密钥进行身份验证
否则,您无法在稍后登录到第三台机器的机器上使用该密钥进行身份验证
seahorse
。
在“~/.bashrc”中添加以下行为我解决了这个问题。我正在使用 Ubuntu 14.04 桌面。
eval `gnome-keyring-daemon --start`
USERNAME="reynold"
export SSH_AUTH_SOCK="$(ls /run/user/$(id -u $USERNAME)/keyring*/ssh|head -1)"
export SSH_AGENT_PID="$(pgrep gnome-keyring)"
这对我有用。
ssh-agent /bin/sh
ssh-add /path/to/your/key
很简单^_^两步
1.yum安装钥匙串
2.将以下代码添加到.bash_profile
/usr/bin/keychain $HOME/.ssh/id_dsa
source $HOME/.keychain/$HOSTNAME-sh
对于那些使用 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
,您可以使用 danhper/fish-ssh-agent 来执行此操作。
chmod 600 config
ssh-add ~/.ssh/gitHubKey
,它会记住您的密钥密码。我提出的解决方案是在重新启动后永久设置它。