首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SSH -只输入一次密码

SSH -只输入一次密码
EN

Stack Overflow用户
提问于 2014-08-06 05:55:58
回答 1查看 4.1K关注 0票数 2

$ ssh localhost上,我被要求提供密码。为每次登录提供密码是一件烦人的事。

所以,我用密码创建了ssh密钥。

代码语言:javascript
运行
复制
$ ssh-keygen -t rsa

我已将~/.ssh/id_rsa.pub的内容复制到~/.ssh/authorized_keys

代码语言:javascript
运行
复制
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

现在,在$ ssh localhost上,我被要求提供密码短语。没有改进,但没有提供密码,而是提供了密码

我偶然发现了键不会自动登录我。,但它并没有解决我的问题。正如评论所说,如果密钥是用密码创建的,那么它总是会请求密码。

但是,如果ssh键是在没有口令的情况下创建的,那么任何ssh操作都不需要密码。

从这篇文章中删除的关键是详细的标志-v

代码语言:javascript
运行
复制
debug1: PEM_read_PrivateKey failed
debug1: read PEM private key done: type <unknown>

在搜索PEM_read_PrivateKey failed时,我看到了很多帖子,其中有几篇来自堆栈溢出本身。

但却找不到合适的解决办法。

然后,我遇到了设置无密码、无密码的ssh,它声明使用ssh代理自动输入密码。

代码语言:javascript
运行
复制
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa

代码语言:javascript
运行
复制
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

但同样,它仅在这一具体会议上得到解决。每次启动新会话时,我都必须执行

代码语言:javascript
运行
复制
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

我可以将它添加到我的.bashrc或.zshrc中,但是为每个会话输入密码是很烦人的。

有没有办法跨会话使用相同的ssh代理?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-06 05:55:58

为了解决跨会话ssh-agent问题,必须理解

代码语言:javascript
运行
复制
$ eval `ssh-agent` && ssh-add ~/.ssh/id_rsa

在执行ssh-agent时,它将很少将unix命令输出到STDOUT

代码语言:javascript
运行
复制
$ 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`将转换为

代码语言:javascript
运行
复制
$ 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_SOCKSSH_AGENT_PID,并将代理的进程id打印到STDOUT

环境变量SSH_AUTH_SOCK指向UNIX

代码语言:javascript
运行
复制
$ file $SSH_AUTH_SOCK
/tmp/ssh-qtCEoF3298/agent.3298: socket 

对于任何其他ssh操作,它都会查找这个套接字,如果它存在,它会使用它或请求密码。但是这个套接字在可以使用之前需要是authenticated,。这是通过添加标识来完成的

代码语言:javascript
运行
复制
$ 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

,这就是我一直在寻找的解决方案

我修改了函数名,以适应我的喜好,在石-欧-袜子中也可以找到同样的函数--与GPGGNOMEOSX相关的函数对我来说并不是必需的。脚本需要重构。

此外,OS X有自己的密钥链。Linux

我还创建了一个rsa,它比整个命令输入要快得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25153154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档