如何永久保存受密码保护的SSH密钥?
我正在使用Awesome Window Manager
如何永久添加带密码的私钥?
受到答案的启发,我在〜/ .ssh / config中添加了私钥
〜/ .ssh / config的内容:
IdentityFile 'private key full path'
〜/ .ssh / config: 0700的 权限
但它对我不起作用。
如果我在每个会话中手动添加密钥,它可以工作,但我正在寻找一种更优雅的方式(不是在.bashrc中)
编辑 :
- 使用Gnome经典(无效果)版本。
使用ssh-copy-if
将SSH密钥添加到远程主机后,当我登录时,我在终端 (GNOME Terminal 3.0.1)中收到以下提示:
ssh -i .ssh/Password-Protected-Key user@host Enter passphrase for key '.ssh/Password-Protected-Key':
- 使用Awesome窗口管理器v3.4.10。 我已经
gnome-keyring-dameon
所以我杀了另一个pid并运行gnome-keyring-daemon --start | grep SOCK
gnome-keyring-daemon --start | grep SOCK
(我也在.profile中添加了它)(grep)输出:
SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh
我按照完全相同的步骤,同样我没有任何GUI ssh-add对话框。
编辑2 :
我从Ubuntu 11.10虚拟机上统一创建了一个新的密码保护密钥,但我仍然无法获得任何密码提示。
编辑3 :似乎这在Awesome窗口管理器中不起作用:(可能还有其他..
如果您使用Unity或启动gnome-keyring-daemon的会话管理器,您只需使用Seahorse(密码和密钥)来建立密钥,定义密钥,设置密码,并将其公钥分发给你打算用ssh的电脑。 不需要终端命令。
您通过以下方式创建密码:
-
选择File-> New并选择Secure Shell Key。 按继续。
-
输入描述性名称,然后选择“
Create and set up
。 -
系统将提示您输入两次关键短语(第二次检查您是否第一次输错了密码短语。
-
输入应使用公钥的计算机以及将使用该密钥的计算机上的用户名。 公钥将被复制到另一台计算机,必要时会在该计算机上提示您输入密码。
现在, My Personal Keys
选项卡将显示密钥。
假设gnome-keyring-daemon在您登录Lightdm时正确启动,并且再次由您的会话管理器启动,当您第一次使用带有ssh的密钥时,系统将提示您输入密钥短语。 在此对话框中,您可以提供关键短语,选择“ Details
控件,并在登录时要求解锁密钥环 – 自动提供此密钥。 按确定
如果有另一个可用于登录远程计算机的密钥,则可能不会以这种方式提示您。
完成此操作后,第一个Seahorse选项卡Passwords
将列出密钥名称的“解锁密码条目”。 单击“ 密码:登录”之前的三角形以查看它。
使密码保护的SSH密钥在会话和重新启动之间保持不变
这可能就是您想要的:输入密钥密码一次,只要您登录就可以使用它 。 它适用于使用Unity或Gnome桌面的大多数用户。
-
在将公钥添加到远程服务器后进行连接时,您将获得GUI ssh-add对话框:
-
通过单击三角形展开“详细信息”,您将得到以下内容。 默认为“我退出时锁定密钥环”,这要求您在每个会话中输入一次密码:
-
将其更改为自动解锁…每当我登录时 ,这意味着无论何时登录到您的会话都会有效 – 它由您的用户密码“控制”。 它会在重新启动后持续存在。
-
输入一次密钥密码即可 – 密钥通过初始成功登录桌面环境进行身份validation。
如果您使用的是AwesomeWM
在全新的用户标识中使用全新安装的AwesomeWM进行测试
-
默认情况下, AwesomeWM使用
ssh-agent
:$ export | grep SSH 声明-x SSH_AGENT_PID =“5479” 声明-x SSH_AUTH_SOCK =“/ tmp / ssh-fWCKNnPq5440 / agent.5440”
-
要使上述步骤起作用,必须使用
gnome-keyring-daemon
作为SSH身份validation守护程序,而不是ssh-agent。 当您使用lightdm登录时,PAM启动gnome-keyring-daemon
,它将尝试使用您的解锁密码解锁登录密钥,但您必须添加配置以使其保持运行并使用它。 -
将以下内容添加到
~/.xprofile
:#!/斌/庆典 eval $(gnome-keyring-daemon --start) 导出SSH_AUTH_SOCK export GNOME_KEYRING_PID export GNOME_KEYRING_CONTROL
~/.xprofile
文件中的命令将在启动awesome窗口管理器之前由~/.xprofile
执行,并将它绑定到PAM通过上述环境变量启动的gnome-keyring-daemon --login
进程。
- 注销回lightdm并重新登录,现在当你执行
ssh user@host
,你应该得到上面的弹出窗口 – 使用它们来解码〜/ .ssh /中的私钥并将你的私钥保存到gnome-keyring登录密钥环。
任何窗口管理器/桌面环境的一般解决方案
-
是使用
gnome-keyring-daemon
而不是ssh-agent
。 为此,您需要运行gnome-keyring-daemon
并将其初始化, 并在ssh-agent
启动后执行此操作或根本不启动ssh-agent
。 -
ssh
(实际上是ssh-add)根据SSH_AUTH_SOCK
环境变量的值决定调用哪个身份validation代理,可以通过键入export | grep SOCK
来检查export | grep SOCK
-
对于ssh-agent,这是
SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130
的forms(不是你希望能够保存你的密钥) -
但对于gnome-keyring-daemon (你想要的)forms
SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"
-
所以检查值,并用
ps aux | grep keyring
检查 gnome-keyring-daemon正在运行的ps aux | grep keyring
,如果是的话,用gnome-keyring-daemon --start
的结果初始化它gnome-keyring-daemon --start
-
然后,您可以通过键入
ssh-add -l
来检查控制台中相关的已保存标识 – 如果它显示“无代理”,则您在配置gnome-keyring-daemon时出错。
您的问题的解决方案是使用ssh代理。 您只需解锁密钥一次,然后由代理保留在内存中并自动使用
- 使用
ssh-keygen -t dsa
生成私钥/公钥对 - 将公钥复制到远程计算机,通常是〜/ .ssh / authorized_keys(使用
ssh-copy-id
) - 登录到远程系统之前运行
ssh-add
,这将要求您输入密码并存储它 - 登录远程系统,无需密码
ssh-agent在.net上有很好的描述,例如:
- http://grantingram.wordpress.com/2007/11/25/ubuntu-and-ssh-agent/
- http://www.unixwiz.net/techtips/ssh-agent-forwarding.html#agent
ssh-agent的另一个优点是,如果您使用ssh -A user@domain.name
登录到远程系统,则可以从domain.name计算机进一步ssh到包含公钥的第三台计算机,而不必将私钥复制到domain.name计算机(它永远不会看到你的私钥,只有一次性挑战/响应)。
您可以使用
ssh-add 'filename or fullpath'
如果您的密钥有密码,将要求您提供密码
然后你可以用密码连接
如果您想使用私钥,请执行以下操作:
ssh-keygen -t rsa -N ''
然后:
通过scp将.ssh/id_rsa.pub
到.ssh/id_rsa.pub
中的机器目标
scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys
全部完成。
无密码连接到远程机器:
ssh user@remote_machine
我们没有密码提示。