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
时,所有已经加载的密钥都会从内存中删除,这是一个好习惯,特别是在使用公共计算机时。
评论区