在$ ssh localhost
上,我被要求提供密码。为每次登录提供密码是一件烦人的事。
所以,我用密码创建了ssh密钥。
$ ssh-keygen -t rsa
我已将~/.ssh/id_rsa.pub
的内容复制到~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
现在,在$ ssh localhost
上,我被要求提供密码短语。没有改进,但没有提供密码,而是提供了密码。
我偶然发现了键不会自动登录我。,但它并没有解决我的问题。正如评论所说,如果密钥是用密码创建的,那么它总是会请求密码。
但是,如果ssh键是在没有口令的情况下创建的,那么任何ssh
操作都不需要密码。
从这篇文章中删除的关键是详细的标志-v
和
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>
在搜索PEM_read_PrivateKey failed
时,我看到了很多帖子,其中有几篇来自堆栈溢出本身。
但却找不到合适的解决办法。
然后,我遇到了设置无密码、无密码的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代理?
发布于 2014-08-06 05:55:58
为了解决跨会话ssh-agent
问题,必须理解
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa
在执行ssh-agent
时,它将很少将unix命令输出到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
-ing a 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打印到STDOUT
环境变量SSH_AUTH_SOCK指向UNIX 。
$ file $SSH_AUTH_SOCK
/tmp/ssh-qtCEoF3298/agent.3298: socket
对于任何其他ssh
操作,它都会查找这个套接字,如果它存在,它会使用它或请求密码。但是这个套接字在可以使用之前需要是authenticated,。这是通过添加标识来完成的
$ ssh-add ~/.ssh/id_rsa
,因为环境变量SSH_AUTH_SOCK是导出的,所以它可以用于来自此shell的任何shell,但不能用于任何新的登录。
然后我偶然发现了理解ssh-agent和ssh-add,它引导我到了ssh-find-agent.bash
ssh-find-agent.bash查找所有活动代理套接字,并将它们作为环境变量导出。
如 乔恩·凯恩斯在文章中所建议的。
在某个可访问的地方(例如~/..ssh find-agent)下载它,并将以下内容添加到shell的配置文件中(例如~/..bashrc,~/..zshrc):*
source ~/.ssh-find-agent/ssh-find-agent.bash
set_ssh_agent_socket
,这就是我一直在寻找的解决方案
我修改了函数名,以适应我的喜好,在石-欧-袜子中也可以找到同样的函数--与GPG
、GNOME
和OSX
相关的函数对我来说并不是必需的。脚本需要重构。
此外,OS X
有自己的密钥链。Linux
我还创建了一个rsa,它比整个命令输入要快得多。
https://stackoverflow.com/questions/25153154
复制相似问题