`

OpenSSH 密钥管理:ssh-agent和keychain

 
阅读更多

介绍 ssh-agent

  ssh-agent 是专为既令人愉快又安全的处理 RSA 和 DSA 密钥而设计的特殊程序,它包括在OpenSSH分发内(请参阅 本系列文章的第 1 部分以得到关于 RSA 和 DSA 认证的介绍)。不同于 ssh , ssh-agent 是个长时间持续运行的守护进程(daemon),设计它的唯一目的就是对解密的专用密钥进行高速缓存。

  ssh 包含的内建支持允许它同 ssh-agent 通信,允许 ssh 不必每次新连接时都提示您要密码才能获取解密的专用密钥。对于 ssh-agent ,您只要使用 ssh-add 把专用密钥添加到 ssh-agent 的高速缓存中。这是个一次性过程;用过 ssh-add 之后, ssh 将从 ssh-agent 获取您的专用密钥,而不会提示要密码短语来烦您了。

  使用 ssh-agent

  让我们看一下整个 ssh-agent 密钥高速缓存系统的工作过程。 ssh-agent 启动时,在脱离 shell(外壳程序)并继续在后台运行之前它会输出一些重要的环境变量。以下是 ssh-agent 开始时生成的输出的一些示例:

 

双击代码全选
1
2
3
4
% ssh-agent
SSH_AUTH_SOCK=/tmp/ssh-XX4LkMJS/agent.26916; export SSH_AUTH_SOCK;
SSH_AGENT_PID=26917; export SSH_AGENT_PID;
echo Agent pid 26917;

  正如您所看到的,事实上 ssh-agent 的输出是一系列 bash 命令;如果这些命令被执行,则将设置两个环境变量:SSH_AUTH_SOCK 和 SSH_AGENT_PID。内含的 export 命令使这些环境变量对之后运行的任何附加命令都可用。唔, 如果 shell 真对这些行进行计算,这一切才会发生,但是此时它们只是被打印到标准输出(stdout)而已。要使之确定,我们可以象下面这样调用 ssh-agent :

 

双击代码全选
1
eval `ssh-agent`

  这个命令先让 bash 运行 ssh-agent 后对 ssh-agent 的输出进行计算。shell 以这种调用方式(使用反引号,而不是普通的单引号)设置并导出 SSH_AGENT_PID 及 SSH_AUTH_SOCK 变量,使这些变量对于您在登录会话期间启动的所有新进程都可用。

  启动 ssh-agent 的最佳方式就是把上面这行添加到您的 ~/.bash_profile 中;这样,在您的登录 shell 中启动的所有程序都将看到环境变量,而且能够定位 ssh-agent ,并在需要的时候向其查询密钥。尤其重要的环境变量是 SSH_AUTH_SOCK;SSH_AUTH_SOCK 包含有 ssh 和 scp 可以用来同 ssh-agent 建立对话的 UNIX 域套接字的路径。

  使用 ssh-add

  但是 ssh-agent 启动时高速缓存当然是空的,里面不会有解密的专用密钥。在我们真能使用 ssh-agent 之前,首先还需要使用 ssh-add 命令把我们的专用密钥添加到 ssh-agent 的高速缓存中。下面的示例中,我使用 ssh-add 把我的 ~/.ssh/identity 专用 RSA 密钥添加到 ssh-agent 的高速缓存中:

 

双击代码全选
1
2
3
4
# ssh-add ~/.ssh/identity
Need passphrase for /home/drobbins/.ssh/identity
Enter passphrase for /home/drobbins/.ssh/identity
(enter passphrase)

  正如您所看到的, ssh-add 要我的密码短语来对专用密钥进行解密并存储在 ssh-agent 的高速缓存中以备使用。一旦您已经用 ssh-add 把专用密钥(或多个密钥)添加到 ssh-agent 的高速缓存中, 并在当前的 shell 中(如果您在 ~/.bash_profile 中启动 ssh-agent ,情况应当是这样)定义 SSH_AUTH_SOCK,那么您可以使用 scp 和 ssh 同远程系统建立连接而不必提供密码短语。

  ssh-agent 的不足之处

  ssh-agent 确实棒,但是其缺省配置还是会留给我们一些小小的不便。让我们来看一下这些不足吧。

  首先,~/.bash_profile 中的 eval `ssh-agent` 使每次登录会话都会启动一个新的 ssh-agent 副本;这不仅仅是有一丁点儿浪费,而且还意味着您得使用 ssh-add 向每个新的 ssh-agent 副本添加专用密钥。如果您只想打开系统上的一个终端或控制台,这没什么大不了的,但是我们中大多数人打开相当多的终端,每次新打开控制台都需要键入密码短语。从技术角度讲,既然一个 ssh-agent 进程的确应当足够了,要是我们还需这样做,这毫无道理。

  有关 ssh-agent 的缺省设置的另外一个问题是它同 cron 作业不兼容。由于 cron 作业是 cron 进程启动的,这些作业无法从它们的环境中继承 SSH_AUTH_SOCK 变量,因而也无从知道 ssh-agent 进程正在运行以及如何同它联系。事实证明这个问题也是可以修补的。

  开始用到 keychain

  为了解决这些问题,我编写了一个有用的 ssh-agent 前端,它基于 bash,叫做 keychain 。 keychain 的特别之处在于它允许 每个系统使用一个 ssh-agent 进程,而非每次登录会话。这意味着您只需对每个专用密钥执行一次 ssh-add ,就一次。正如我们稍后将要看到的一样, keychain 甚至有助于优化 ssh-add ,而这只要它试图向那些正在运行的 ssh-agent 添加其高速缓存中没有的专用密钥。

分享到:
评论

相关推荐

    [Mac]解决mac机器上没有ssh-copy-id的问题

    在Mac操作系统中,SSH(Secure Shell)是一种用于安全远程登录的网络协议,广泛用于Linux和Unix-like系统...通过Homebrew安装和管理OpenSSH是一种有效且便捷的方法,能够帮助开发者快速恢复远程SSH连接的无密码便利性。

    ssh-copy-id 脚本

    问题:ssh-copy-id 命令无法使用,在linux服务器的ssh服务中没有有这个命令,可以在/usr/bin/的这文件夹中查看没有这个ssh-copy-id 命令。 问题分析:是由于ssh服务的问题,可以直接将ssh-copy-id 命令拷贝/usr/...

    openssh最新rpm包openssh-9.4p1openssh9.4p1

    修复关键漏洞:OpenSSH ssh-agent 组件存在远程代码 执行漏洞(CVE-2023-38408) 漏洞影响范围: 5.5 < OpenSSH ≤ 9.3p1 建议升级9.3p2或者9.4p1 openssh-9.4p1-1.el7.x86_64.rpm openssh-askpass-9.4p1-1.el7.x86_...

    ubuntu离线安装包ssh-server.zip

    Ubuntu20.04离线安装openssh-server 安装步骤: sudo dpkg -i libssl1.0.0_1.0.2n-1ubuntu5.7_amd64.deb sudo dpkg -i openssh-client_8.4p1-6ubuntu1_amd64.deb sudo dpkg -i openssh-sftp-server_8.4p1-6ubuntu1_...

    OpenSSH登录SSH2

    #### 一、OpenSSH与SSH2简介 SSH(Secure Shell)是一种网络协议,用于计算机之间的加密登录。SSH2是SSH协议的第二个版本,提供了更安全的数据传输方式。OpenSSH是SSH协议的一种免费实现,广泛应用于各种操作系统中...

    适用于CentOS6.*和redhat el6系列的openssh9.7P1,x86架构rpm包

    openssh-debuginfo-9.7p1-1.el6.x86_64.rpm openssh-9.7p1-1.el6.x86_64.rpm openssh-clients-9.7p1-1.el6.x86_64.rpm openssh-server-9.7p1-1.el6.x86_64.rpm 版本信息: # ssh -V OpenSSH_9.7p1, OpenSSL 1.1.1w ...

    ssh-agency:从Emacs在Microsoft Windows上使用ssh-agent

    1. **安装依赖**:首先,你需要在你的系统上安装 OpenSSH 客户端,这通常包含了一个 SSH-Agent 实现。 2. **获取 ssh-agency**:从 ssh-agency 的仓库下载或克隆代码,解压至本地目录。 3. **配置 Emacs**:在 `....

    openssh-9.3p2升级包(openssh、zlib、openssl)

    包含openssh升级到openssh-9.3p2的所有包,其内容如下: - openssh-9.3p2.tar.gz - openssl-1.0.2o.tar.gz - zlib-1.2.11.tar.gz 解决漏洞: - OpenSSH 安全漏洞(CVE-2023-38408) - OpenSSH远程代码执行漏洞(CVE-...

    update-ssh-keys:不推荐使用的用于管理授权ssh密钥的工具

    更新SSH密钥 :warning: 此板条箱已弃用且未维护 :warning: update-ssh...关于update-ssh-keys update-ssh-keys是命令行工具,也是用于管理openssh授权公共密钥的库。 它跟踪带有名称的键集,允许添加其他键,以及删除和

    openssh-9.6p1-1.el8.x86-64-no-ssh-copy-id.tgz

    适用redhat 8 centos 8 x86架构的操作系统使用 ...openssh 9.6 p1 rpm二进制包 不含ssh-copy-id命令 安全漏洞更新、升级更新openssh版本号,基于openssl 1.1.1k制作,安装后会显示openssl 版本信息 2024年1月5日制作

    openssh-9.7p1-1.el7.x86-64-ssh-copy-id.tgz

    适用于centos 7 redhat 7 x86架构操作系统升级更新openssh 9.7 版本,修复安全漏洞 此包为二进制rpm包,包含ssh-copy-id命令 2024年3月11日 官方发布9.7版本,此包基于官方源码制作,无ssl信息显示。

    openssh-9.3p1-1.el7.x86-64.tar.gz

    openssh-9.3p1-1.el7.src.rpm openssh-9.3p1-1.el7.x86_64.rpm openssh-askpass-9.3p1-1.el7.x86_64.rpm openssh-askpass-gnome-9.3p1-1.el7.x86_64.rpm openssh-clients-9.3p1-1.el7.x86_64.rpm openssh-debuginfo-...

    openssh-askpass-gnome-6.6p1-1.x86_64.rpm

    这个是编译完成的,RHEL平台测试能用,如果不能用,可以试我发的另一个源码版本,是openssl6.7.

    openssh-9.7p1-1.el7.x86-64-ssh-copy-id-openssl.tgz

    适用于centos 7 redhat 7 x86架构的二进制openssh rpm包,版本9.7p1 2024年3月11日官方发布9.7版本,内含ssh-copy-id命令,安装后显示openssl版本,此包基于openssl 1.1.1w制作,因此安装后会显示1.1.1w版本的...

    centos7系列 openssh9.8p1 rpm安装包

    openssh-9.8p1-3.el7.x86_64.rpm openssh-clients-9.8p1-3.el7.x86_64.rpm openssh-server-9.8p1-3.el7.x86_64.rpm openssh-debuginfo-9.8p1-3.el7.x86_64.rpm 更新使用脚本: #卸载当前系统openssh相关内容 rpm -e ...

    openssh-9.6p1-1.el7.x86-64-centos7-openssl-1.1.1w-ssh-copy-id

    适用于centos 7 redhat 7 x86架构操作系统 openssh 9.6 二进制rpm包 基于openssl 1.1.1w 包含ssh-copy-id命令 2024年1月5日 制作

    ssh-agent-relay:使您的WSL安装使用Windows SSH代理

    通过提升的PowerShell帐户: Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0sc.exe config ssh-agent start=autonet start ssh-agent 然后,在PowerShell中添加一个密钥: ssh-add # # Here's ...

    openssh-9.0p1-1.el7.x86_64.tar.gz

    openssh-9.0p1-1.el7.src.rpm openssh-9.0p1-1.el7.x86_64.rpm openssh-askpass-9.0p1-1.el7.x86_64.rpm openssh-askpass-gnome-9.0p1-1.el7.x86_64.rpm openssh-clients-9.0p1-1.el7.x86_64.rpm openssh-debuginfo-...

    x11-ssh-askpass-1.2.4.1.tar.gz

    - **安全策略**:尽量避免频繁的手动SSH登录,优先使用密钥对认证,提高安全性。 - **日志监控**:监控SSH活动,记录登录尝试,以便于排查异常行为。 - **版本更新**:定期检查软件更新,确保使用的是安全的版本,...

    openssh9.6p1 for BCLinux-for-Euler-21.10LTS

    openssh-9.6p1-1.oe1.bclinux.x86_64.rpm 4.8M 2024年2月1日 13:58 openssh-clients-9.6p1-1.oe1.bclinux.x86_64.rpm 4.9M 2024年2月1日 13:58 openssh-debuginfo-9.6p1-1.oe1.bclinux.x86_64.rpm 3.4M 2024年2月1...

Global site tag (gtag.js) - Google Analytics