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

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

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

目 录CONTENT

文章目录

Linux ssh-add命令教程:密钥管理的艺术(附实例详解和注意事项)

在Linux环境下,ssh-add命令是SSH (Secure Shell) 协议的一个重要组成部分,用于将私钥添加到SSH代理的密钥缓存中。这样做可以让用户在使用SSH进行远程登录或执行命令时不必每次都输入密码。ssh-add命令可以大大简化系统管理员和频繁使用SSH服务的用户的操作流程。

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

ssh-add命令通常预装在大多数Linux发行版中。如果系统中未找到ssh-add命令,可能需要安装openssh-client或类似软件包。以下是不同发行版安装ssh-add命令的方法:

# 基于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

# 基于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

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

Linux ssh-add命令的基本语法

语法格式如下:

ssh-add [选项] [文件...]

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

下面是ssh-add命令的一些常用选项和参数的说明,按字母顺序排序,为了简明扼要,只列出20个最常用的选项:

选项说明
-D删除ssh-agent中的所有私钥
-d删除指定的私钥
-e指定一个已经存在的PKCS#11共享库
-l列出ssh-agent中所有私钥的指纹
-L列出ssh-agent中所有公钥
-s添加指定的PKCS#11共享库
-t为添加的私钥设置生存周期
-X解锁ssh-agent
-x锁定ssh-agent

Linux ssh-add命令实例详解

实例1:添加默认私钥

将默认的SSH私钥(~/.ssh/id_rsa~/.ssh/id_dsa~/.ssh/id_ecdsa~/.ssh/id_ed25519)添加到ssh-agent中。

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

实例2:添加特定私钥

添加一个指定的私钥文件到ssh-agent中。

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

实例3:列出所有添加的私钥指纹

列出ssh-agent中所有加载的私钥的指纹。

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

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

从ssh-agent中删除所有私钥。

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

实例5:删除特定私钥

从ssh-agent中删除指定的私钥。

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

实例6:添加私钥并设置过期时间

添加一个私钥,并为其设置一个过期时间(例如,过期时间设置为1小时)。

[linux@bashcommandnotfound.cn ~]$ ssh-add -t 1h ~/.ssh/my_other_rsa

实例7:锁定ssh-agent

锁定ssh-agent以阻止对存储的私钥的访问。

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

实例8:解锁ssh-agent

如果之前锁定了ssh-agent,可以使用此命令解锁,恢复对私钥的访问。

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

实例9:添加多个私钥

一次性添加多个私钥到ssh-agent中。

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

实例10:使用PKCS#11添加智能卡

添加支持PKCS#11的智能卡模块。

[linux@bashcommandnotfound.cn ~]$ ssh-add -s /usr/lib/opensc-pkcs11.so

实例11:列出ssh-agent中的公钥

列出ssh-agent中所有已加载私钥对应的公钥。

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

实例12:删除特定公钥

如果知道公钥的内容,可以直接用其内容来删除ssh-agent中的对应私钥。

[linux@bashcommandnotfound.cn ~]$ ssh-add -d <公钥内容>

实例13:添加私钥并设置确认请求

添加一个私钥到ssh-agent,并要求每次使用时都进行确认。

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

实例14:添加私钥并指定PKCS#11共享库

如果使用的私钥存储在PKCS#11兼容的设备上,可以指定共享库路径。

[linux@bashcommandnotfound.cn ~]$ ssh-add -s /path/to/pkcs11-library.so

实例15:解除添加的PKCS#11共享库

从ssh-agent中删除所有由指定PKCS#11共享库提供的私钥。

[linux@bashcommandnotfound.cn ~]$ ssh-add -e /usr/lib/opensc-pkcs11.so

实例16:显式指定ssh-agent的socket

如果有多个ssh-agent运行,或者环境变量未正确设置,可以使用SSH_AUTH_SOCK环境变量显式指定ssh-agent的socket。

[linux@bashcommandnotfound.cn ~]$ SSH_AUTH_SOCK=/tmp/ssh-XXhjGp1060/agent.1060; export SSH_AUTH_SOCK;
[linux@bashcommandnotfound.cn ~]$ ssh-add

实例17:在脚本中添加私钥而不使用ssh-agent的提示

在自动化脚本中添加私钥时,为避免交互式密码提示,可以使用expect工具。

#!/usr/bin/expect -f
spawn ssh-add /home/user/.ssh/id_rsa
expect "Enter passphrase for /home/user/.ssh/id_rsa:"
send "your_password\r"
expect "Identity added:"

实例18:添加私钥时指定密钥的评论

ssh-add本身没有直接添加评论的选项,但可以在生成密钥时添加评论,然后用ssh-add加载它们。

[linux@bashcommandnotfound.cn ~]$ ssh-keygen -t rsa -C "your_email@example.com"
[linux@bashcommandnotfound.cn ~]$ ssh-add ~/.ssh/id_rsa

实例19:查看ssh-agent的状态

检查ssh-agent是否正在运行,以及它是否有加载的密钥。

[linux@bashcommandnotfound.cn ~]$ ps -e | grep ssh-agent
[linux@bashcommandnotfound.cn ~]$ ssh-add -l

实例20:清除ssh-agent中的所有公钥

如果需要从ssh-agent中删除所有公钥,可以先删除所有私钥,这会同时移除其对应的公钥。

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

注意事项和常见问题

  • ssh-agent未运行:如果尝试使用ssh-add但系统提示ssh-agent未运行,可以先运行eval $(ssh-agent)来启动ssh-agent。
  • 权限问题:确保私钥文件的权限正确设置,通常应为600(即只有文件所有者有读写权限)。
  • 密码提示:如果私钥被密码保护,ssh-add在添加时会要求输入密码。如果不希望每次都输入密码,可以考虑使用密钥无密码或使用ssh-agent的解锁功能。
  • 兼容性问题:确保私钥格式与ssh-agent兼容。某些较老的私钥格式可能需要转换。
  • PKCS#11支持:对于使用硬件安全模块(如智能卡)的用户,ssh-add支持通过PKCS#11接口与设备交互。
  • 生命周期管理:使用-t选项可以指定私钥在ssh-agent中的生命周期。这可以增加安全性,因为即使设备被盗,私钥也会在一段时间后自动失效。
0

评论区