我正在使用 Awesome Window Manager
如何永久添加带有密码的私钥?
受到答案的启发这里我已在 ~/.ssh/config 中添加了私钥
~/.ssh/config 的内容:
IdentityFile 'private key full path'
~/.ssh/config 的权限: 0700
但它对我不起作用。
如果我在每个会话中手动添加密钥,它可以起作用,但我正在寻找一种更优雅的方式(不在 .bashrc 中)
编辑:
- 使用侏儒经典(无效果)版本。
将 SSH 密钥添加ssh-copy-if
到远程主机后,我收到以下提示终端(GNOME Terminal 3.0.1)当我登录时:
ssh -i .ssh/Password-Protected-Key user@host
Enter passphrase for key '.ssh/Password-Protected-Key':
- 使用惊人的窗口管理器 v3.4.10。我已经
gnome-keyring-dameon
这样做了,所以我杀死了另一个 pid 并运行gnome-keyring-daemon --start | grep SOCK
(我也在 .profile 中添加了它)(grep)输出:
SSH_AUTH_SOCK=/tmp/keyring-2LXXXX/ssh
我遵循了完全相同的步骤,但同样没有得到任何 GUI ssh-add 对话框。
编辑2:
我从 Unity 上的 Ubuntu 11.10 虚拟机创建了一个新的受密码保护的密钥,但仍然无法收到任何密码提示。
编辑3:这似乎无法在 Awesome 窗口管理器中工作 :( 也可能在其他窗口中工作..
答案1
使受密码保护的 SSH 密钥在会话和重启期间保持不变
这可能就是您想要的:输入一次密钥密码后,无论何时登录,它都可以永远使用。它适用于大多数使用 Unity 或 Gnome 桌面的用户。
当您将公钥添加到远程服务器并连接时,您将看到 GUI ssh-add 对话框:
点击三角形展开“详细信息”,您将看到以下内容。默认为“注销时锁定密钥环”,这要求您每次会话都输入一次密码:
将其更改为每当我登录时自动解锁,这意味着只要您登录到会话,它就会起作用 —— 它由您的用户密码“控制”。它将在重新启动后继续存在。
输入一次密钥密码即可 - 该密钥通过首次成功登录您的桌面环境进行验证。
如果您使用 AwesomeWM
使用新用户 ID 全新安装的 AwesomeWM 进行测试
默认情况下,AwesomeWM用途
ssh-agent
:$ 导出 | grep SSH 声明-x SSH_AGENT_PID =“5479” 声明-x SSH_AUTH_SOCK =“/tmp/ssh-fWCKNnPq5440/agent.5440”
要使上述步骤生效,您必须使用
gnome-keyring-daemon
SSH 身份验证守护程序,而不是 ssh-agent。当您使用 lightdm 登录时,PAM 会启动,gnome-keyring-daemon
并尝试使用您的解锁密码解锁登录密钥,但您必须将其添加到您的配置中才能使其保持运行并使用它。将以下内容添加到您的末尾
~/.xprofile
:/bin/bash #!/bin/bash eval $(gnome-keyring-daemon --start) 导出 SSH_AUTH_SOCK 导出 GNOME_KEYRING_PID 导出 GNOME_KEYRING_CONTROL
中的命令~/.xprofile
将在启动之前由 xsession 执行惊人的gnome-keyring-daemon --login
窗口管理器,并通过上述环境变量将其与 PAM 启动的进程绑定在一起。
- 退出并重新登录 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
,可以通过输入以下命令进行检查export | grep SOCK
这是形式
SSH_AUTH_SOCK=/tmp/ssh-MMFyVlI22130/agent.22130
这是ssh 代理 (这不是您想要保存密钥的功能)但形式
SSH_AUTH_SOCK="/tmp/keyring-mEQB5g/ssh"
为gnome-keyring-守护进程 (你要哪个)因此请检查值,并检查
ps aux | grep keyring
它检查一下gnome-keyring-守护进程正在运行,如果是,则使用以下结果对其进行初始化gnome-keyring-daemon --start
然后,您可以通过键入以下内容在控制台中检查相关的已保存身份
ssh-add -l
- 如果显示“无代理”,则您在配置 gnome-keyring-daemon 时犯了错误。
答案2
如果您使用的是 Unity,或者启动 gnome-keyring-daemon 的会话管理器,则只需使用 Seahorse(密码和密钥)即可建立密钥、定义其用途、设置密码并将其公钥分发到您要使用 ssh 的计算机。无需终端命令。
您可以通过以下方式创建密码:
选择文件->新建,然后选择安全外壳密钥。按继续。
输入描述性名称,然后选择
Create and set up
。系统将提示您输入两次关键词(第二次是为了检查您第一次没有输入错误)。
输入要使用公钥的计算机以及您将在该计算机上使用该密钥的用户名。公钥将被复制到另一台计算机,并在必要时提示您在该计算机上输入密码。
现在My Personal Keys
选项卡将显示密钥。
假设您登录 Lightdm 时 gnome-keyring-daemon 已正确启动,并且会话管理器再次启动了该进程,当您首次将密钥与 ssh 结合使用时,系统将提示您输入密钥短语。在此对话框中,您可以提供密钥短语,选择控件Details
并要求每次登录时解锁密钥环——自动提供此密钥。按OK
如果有其他密钥可用于登录远程计算机,则可能不会以这种方式提示您。
完成此操作后,第一个 Seahorse 选项卡Passwords
将列出密钥名称的“解锁密码条目”。单击“密码:登录”即可查看。
答案3
解决您的问题的方法是使用 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 的另一个优点是如果您使用 登录到远程系统,您可以进一步从 domain.name 计算机 ssh 到包含您的公钥的第三台计算机,而无需将您的私钥复制到 domain.name 计算机(并且它永远不会看到您的私钥,只有一次性的质询/响应)。ssh -A [email protected]
答案4
如果您想使用私钥,请执行以下操作:
ssh-keygen -t rsa -N ''
然后:
通过 scp复制.ssh/id_rsa.pub
到目标机器.ssh/authorized_keys
scp .ssh/id_rsa.pub user@remote_machine:~/.ssh/authorized_keys
全做完了。
无需密码即可连接远程机器:
ssh user@remote_machine
而且我们没有密码提示。