侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux ssh-agent命令教程:管理SSH密钥认证的高效助手(附实例详解和注意事项)

ssh-agent是一个密钥管理器,用于管理SSH私钥,减少密钥的重复输入。它在用户的会话中运行,将私钥加载到内存中,以便SSH可以直接使用它们进行身份验证。

Linux ssh-agent命令介绍

ssh-agent 是一个辅助程序,用于保存公钥身份验证所需的私钥。当启动 ssh-agent 时,它会在后台运行,并且会为存储的私钥提供认证服务。这样,使用SSH客户端连接到远程服务器时,无需每次都手动输入密钥密码。

Linux ssh-agent命令适用的Linux版本

ssh-agent 命令广泛适用于各种Linux发行版,作为OpenSSH包的一部分包含在内。几乎所有主流Linux发行版中都可以找到它。如果系统中没有安装 ssh-agent,可以按照以下方法进行安装:

# 基于apt的发行版(如Debian、Ubuntu、Raspbian、Kali Linux等)
sudo apt-get update && sudo apt-get install openssh-client

# 基于yum的发行版(如RedHat,CentOS 7等)
sudo yum update && sudo yum install openssh-clients

# 基于dnf的发行版(如Fedora,CentOS 8等)
sudo dnf update && sudo dnf install openssh-clients

# 基于apk的发行版(如Alpine Linux)
sudo apk add --update openssh-client

# 基于pacman的发行版(如Arch Linux)
sudo pacman -Syu && sudo pacman -S openssh

# 基于zypper的发行版(如openSUSE)
sudo zypper ref && sudo zypper in openssh

# 基于pkg的FreeBSD发行版
sudo pkg update && sudo pkg install openssh

# 基于Homebrew的OS X/macOS发行版
brew update && brew install openssh

Linux ssh-agent命令的基本语法

语法格式:

ssh-agent [options] [command [argument ...]]

Linux ssh-agent命令的常用选项或参数说明

选项/参数说明
-c生成C-shell命令行的代码。
-s生成Bourne shell命令行的代码。
-k杀死当前ssh-agent进程。
-a socket指定ssh-agent的UNIX套接字文件。
-t life设置密钥的默认时间寿命。

上述是ssh-agent最常用的选项和参数,其他更多选项可以通过man ssh-agent命令查看。

Linux ssh-agent命令实例详解

实例1:启动ssh-agent

[linux@bashcommandnotfound.cn ~]$ eval $(ssh-agent)

这个命令会启动 ssh-agent 并设置环境变量,这样其他程序就可以连接到 ssh-agent

实例2:添加SSH私钥

[linux@bashcommandnotfound.cn ~]$ ssh-add ~/.ssh/id_rsa

上述命令会将私钥 id_rsa 添加到 ssh-agent 管理下,之后在使用SSH连接其他服务器时,不需要再次输入该私钥的密码。

实例3:列出ssh-agent管理的密钥

[linux@bashcommandnotfound.cn ~]$ ssh-add -l

这条命令会列出 ssh-agent 当前管理的所有密钥。

实例4:删除ssh-agent中的所有密钥

[linux@bashcommandnotfound.cn ~]$ ssh-add -D

如果要从 ssh-agent 中删除所有密钥,可以使用上述命令。

实例5:设置密钥的生存周期

[```bash
[linux@bashcommandnotfound.cn ~]$ ssh-agent -t 3600

这个命令启动 ssh-agent 并且设置所有添加到 ssh-agent 的密钥的生存周期为3600秒(1小时)。在这个时间段后,密钥将自动从 ssh-agent 中过期并被移除。

实例6:删除ssh-agent中的特定密钥

ssh-add -d ~/.ssh/id_rsa

上述命令会从 ssh-agent 中删除特定的私钥 id_rsa,如果你不再需要这个密钥或需要替换它,这会很有用。

实例7:查看ssh-agent的进程ID

echo $SSH_AGENT_PID

这行命令会打印当前 ssh-agent 的进程ID。如果你启动了 ssh-agent 并且使用了 eval $(ssh-agent),这个环境变量应该会被设置。

实例8:手动启动一个新的ssh-agent会话

ssh-agent bash

该命令会启动一个新的 bash shell会话,并初始化一个新的 ssh-agent 进程。在这个新启动的shell中,所有SSH操作都将使用这个新的 ssh-agent

实例9:将ssh-agent环境变量导入到当前会话

假设你在一个终端窗口中启动了 ssh-agent 并希望在新的终端窗口中使用它,你可以按照如下方式:

SSH_AGENT_PID=1234; export SSH_AGENT_PID
SSH_AUTH_SOCK=/tmp/ssh-XYZabc/agent.1234; export SSH_AUTH_SOCK

你需要将 1234/tmp/ssh-XYZabc/agent.1234 替换成实际的 ssh-agent 进程ID和套接字路径。

实例10:在ssh-agent中设置密钥的最大生存时间

ssh-add -t 3600 ~/.ssh/id_rsa

这个命令会将私钥 id_rsa 添加到 ssh-agent 管理下,并设置这个密钥的最大生存时间为3600秒(1小时)。在这个时间段后,这个密钥将自动从 ssh-agent 中过期并被移除。

实例11:使用ssh-agent启动一个SSH会话

ssh-agent ssh user@host

这个命令会为你的SSH会话启动一个 ssh-agent,如果你的私钥已经被 ssh-agent 管理,登录时将不需要你手动输入密钥密码。

实例12:杀死指定的ssh-agent进程

ssh-agent -k

在使用 -k 选项时,你可以结束当前会话的 ssh-agent 进程,确保不再有密钥被保留在内存中。如果你知道要结束的 ssh-agent 的进程ID,你也可以直接杀死它:

kill $SSH_AGENT_PID

确保替换 $SSH_AGENT_PID 为你想要杀死的 ssh-agent 进程的实际ID。

注意事项

  • 当你启动 ssh-agent 时,它通常会为你的用户会话创建一个环境变量 SSH_AUTH_SOCK,这个环境变量让SSH客户端知道如何与 ssh-agent 进行通信。如果你在新的shell会话中没有这个环境变量,你可能需要重新运行 eval $(ssh-agent) 来设置它。
  • 如果你的 ssh-agent 正在管理多个密钥并且你正在连接到多个服务器,有可能会遇到「试错」的问题,因为 ssh-agent 可能会尝试使用错误的密钥。这可以通过在 ~/.ssh/config 文件中为每个主机指定一个特定的密钥来解决。
  • 保持 ssh-agent 运行时,如果你的系统未受到适当保护,可能会增加安全风险。确保你的系统是安全的,特别是如果你在公共或不受信任的网络上。
  • 当你使用 -k 选项杀死 ssh-agent 时,所有已经加载的密钥都会从内存中删除,这是一个好习惯,特别是在使用公共计算机时。
0

评论区