1. .1. ssh-agent 简介

ssh-agent 是一个用于管理 SSH 密钥的认证代理,它可以在一段时间内缓存您的私钥,使得在此期间内无需重复输入密码即可进行 SSH 连接。下面是关于 ssh-agent 的优缺点:

优点:

方便性:ssh-agent 可以让用户在一定时间内轻松地管理和使用他们的 SSH 密钥,而无需反复输入密码。 安全性:通过 ssh-agent,用户可以将私钥保存在内存中而不是硬盘上,从而减少私钥被恶意获取的风险。 自动化:对于脚本或其他自动化操作,ssh-agent 可以让您无需人工干预即可进行安全的 SSH 连接。 缺点:

安全性考量:尽管 ssh-agent 提高了私钥的安全性,但一旦攻击者获得了对系统的完全控制权限,仍然可能访问到内存中的私钥。 生命周期管理:ssh-agent 中缓存的密钥在一定时间内保持有效,这可能会导致一些安全隐患,特别是在共享计算机上使用时。

总的来说,ssh-agent 为 SSH 密钥的管理提供了便利性和安全性,但在使用时仍需用户对其安全性有清晰的认识,并设置合适的安全策略以确保数据的安全。

2. .2. 原理图

3. .3. 生成密钥对

mkdir /opt/.ssh

# 生成带密钥的密钥对
ssh-keygen -f <文件名称> -t rsa -P <3种类型16位以上的密码>

# 例1 显式输入密码
ssh-keygen -f box -t rsa -P "16位以上的密码"

# 例2 隐式输入密码(推荐)
ssh-keygen -f box -t rsa

生成两个文件

  • box 是私钥(加密的)
  • box.pub 是公钥

4. .4. 开启 ssh-agent

eval `ssh-agent`

# or
eval "$(ssh-agent -s)"

5. .5. ssh-add 管理密钥

5.1. .5.1. 添加

# box 私钥
ssh-add box

5.2. .5.2. 查看

# 查看私钥列表,所有的哦
ssh-add -l

# 查看公钥列表,也是所有的哦
ssh-add -L

5.3. .5.3. 删除

# 删除单个密钥对
ssh-add -d box

# 删除所有的密钥对
ssh-add -D

6. .6. 复制公钥

  • 不是本机,是其它机器上哦
mkdir -p ~/.ssh && chmod 700 ~/.ssh && touch ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys

# 将 box 公钥内容粘贴到文件内
vim  ~/.ssh/authorized_keys
## 或
ssh-copy-id -i box user@remote-server

7. .7. ssh 免密连接

# 身份验证检查,更加安全哟
ssh <other-host>

# or 免提示哦
ssh -o StrictHostKeyChecking=no <other-host>

8. .8. 终结 ssh-agent

  • ssh-agent 是将密钥保存在内存里,为了安全终结当前 ssh-agent 进程。
ssh-agent -k

# 如果成功关闭 ssh-agent,它会输出以下消息
Agent pid 12345 killed

9. 自动化

# 将 SSH Agent 环境变量添加到 .bashrc 中以便之后的 shell 会话能够找到 agent
echo 'eval $(ssh-agent)' >> ~/.bashrc
echo 'ssh-add /opt/ssh/box' >> ~/.bashrc

10. DEBUG

将公钥复制再次 ssh 时还提示输入密码,则需要采用以下操作。

# 设置权限
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 /path/to/your/private/key

# debug
ssh -vvv user@remote-server

# 查看公钥
ssh-add -L

# 指定私钥
   ssh -i /path/to/your/private/key user@remote-server