在$ ssh localhost
,我被要求提供密码。每次登录都提供密码,这很麻烦,也很烦人。
所以,我用passphrase创建了ssh密钥..
$ ssh-keygen -t rsa
我已将~/.ssh/id_rsa.pub
的内容复制到~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
现在,$ ssh localhost
我被要求提供密码短语。没有改进,但没有提供密码,而是提供密码。
我遇到了Adding public key to ~/.ssh/authorized_keys does not log me in automatically,但它没有解决我的问题。 正如the comment所述,如果密钥是使用密码创建的,它将始终要求密码。
但是,如果 ssh键已创建没有密码短语,则任何ssh
操作都不需要密码短语。
这篇文章的关键点是详细标记-v
和
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
在搜索PEM_read_PrivateKey failed
时,我发现了很多帖子,其中几个来自stackoverflow本身。
但找不到合适的解决方案。
然后我遇到Setting up passwordless, passphraseless ssh,其中说明了使用ssh代理自动输入密码短语。
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
或
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa
但同样,它只针对该特定会话解决了。每次我开始一个新的会话时,我都必须执行
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa
我可以将它添加到我的.bashrc或.zshrc中,但是为每个会话输入密码都很烦人。
有没有办法在会话中使用相同的ssh-agent?
答案 0 :(得分:2)
为了解决交叉会话ssh-agent
,必须理解
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa
在执行ssh-agent
时,它会向STDOUT
$ ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-qtCEoF3298/agent.3298; export SSH_AUTH_SOCK;
SSH_AGENT_PID=3299; export SSH_AGENT_PID;
echo Agent pid 3299;
评估或eval
- command
将执行命令的输出。
因此,eval`ssh-agent`
会转换为
$ SSH_AUTH_SOCK=/tmp/ssh-qtCEoF3298/agent.3298; export SSH_AUTH_SOCK; SSH_AGENT_PID=3299; export SSH_AGENT_PID; echo Agent pid 3299;
以上语句设置环境变量 SSH_AUTH_SOCK 和 SSH_AGENT_PID ,并将代理程序的进程ID 打印到{{1 }}
环境变量 SSH_AUTH_SOCK指向UNIX套接字。
STDOUT
对于任何其他$ file $SSH_AUTH_SOCK
/tmp/ssh-qtCEoF3298/agent.3298: socket
操作,它会查找此套接字,如果存在则使用它或要求密码短语。但是,在使用之前,此套接字需要经过身份验证。这是通过添加身份
ssh
由于环境变量SSH_AUTH_SOCK已导出,因此它可用于源自此shell的任何shell,但不适用于任何新登录。
然后我遇到Understanding ssh-agent and ssh-add引导到ssh-find-agent.bash
ssh-find-agent.bash查找所有实时代理套接字并将其导出为环境变量。
根据Jon Cairns的建议,在帖子中。
将其下载到可访问的地方(例如〜/ .ssh-find-agent)并将以下内容添加到shell的配置文件中(例如〜/ .bashrc,〜/ .zshrc):***
$ ssh-add ~/.ssh/id_rsa
source ~/.ssh-find-agent/ssh-find-agent.bash
这就是我一直在寻找的解决方案
我修改了函数名称,以符合我的偏好,同样可以在ssh-auth-sock找到
与set_ssh_agent_socket
,GPG
和&amp;我的目的不需要GNOME
。该脚本需要重构。
此外,OSX
有自己的钥匙串。
Thus I execute these functions only for Linux
我还创建了一个alias for eval ssh-agent
&& ssh-add ~/.ssh/id_rsa ,更快来键入整个命令。