【问题标题】:SSH - Entering a Passphrase Only OnceSSH - 只输入一次密码
【发布时间】:2014-09-28 23:04:53
【问题描述】:

$ ssh localhost,我被要求提供密码。为每次登录提供密码既乏味又烦人。

所以,我创建了带有密码的 ssh 密钥..

$ ssh-keygen -t rsa

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

$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

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

我遇到了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?

【问题讨论】:

    标签: linux bash ssh zsh ssh-agent


    【解决方案1】:

    要解决跨会话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 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_SOCKSSH_AGENT_PID,还将代理的进程ID打印到STDOUT

    环境变量SSH_AUTH_SOCK 指向一个UNIX 套接字

    $ file $SSH_AUTH_SOCK
    /tmp/ssh-qtCEoF3298/agent.3298: socket 
    

    对于任何其他ssh 操作,它会查找此套接字,如果存在则使用它或询问密码。但此套接字需要经过身份验证,才能使用。这是通过添加身份来完成的

    $ ssh-add ~/.ssh/id_rsa
    

    由于环境变量 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):***

    source ~/.ssh-find-agent/ssh-find-agent.bash

    set_ssh_agent_socket

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

    我已经修改了函数名称,以满足我的喜好,同样可以在ssh-auth-sock找到 我的目的不需要与GPGGNOMEOSX 相关的函数。脚本需要重构。

    此外,OS X 有自己的钥匙串。 Thus I execute these functions only for Linux

    我还创建了一个alias for eval ssh-agent && ssh-add ~/.ssh/id_rsa ,它比整个命令输入更快

    【讨论】:

    • “因此我只为 Linux 执行这些功能”是 404
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多