如何在Linux/Unix上使用ssh-agent进行身份验证

时间:2020-01-09 10:39:53  来源:igfitidea点击:

在Linux和类似Unix的系统(例如macOS或FreeBSD桌面)上,如何使用ssh-agent命令进行非交互式身份验证?
我的私钥受密码或密码保护。
因此,如何输入密码才能多次使用ssh私钥进行身份验证。
我怎样才能告诉ssh只问一次密码?
您需要使用ssh-agent命令。
它会保存用于ssh公钥身份验证的私钥。
换句话说,ssh-agent会记住该密码并将其暂时存储在内存中。
然后,只要将ssh命令与私钥一起使用,ssh-agent就会启动以提供ssh会话的密码。
因此,消除了再次执行密码短语的麻烦。

使用ssh-agent命令进行非交互式身份验证

打开终端并输入以下命令:

$ eval $(ssh-agent)

$ eval `ssh-agent`

您将在屏幕上看到ssh-agent的PID,如下所示:

Agent pid 97280

使用ssh-add将私钥密码短语添加到ssh-agent

现在我们的ssh-agent正在运行,您需要为ssh私钥提供密码。
例如,运行ssh-add命令:

$ ssh-add

输入密码:

Enter passphrase for /home/Hyman/.ssh/id_ed25519: 
Identity added: /home/Hyman/.ssh/id_ed25519 (Hyman@theitroad)

默认情况下,它添加文件~/.ssh/id_rsa,~/.ssh/id_dsa,~/.ssh/id_ecdsa,~/.ssh/id_ecdsa_sk,~/.ssh/id_ed25519和~/.ssh/id_ed25519_sk。
但是,我们声明另一个私钥文件如下:

$ ssh-add ~/.ssh/aws-web-servers

设置身份/私钥的最长生存期

向代理添加身份时,将-t life传递给ssh-add命令以最大寿命。
生存期可以以秒为单位或以sshd_config文件中指定的时间格式指定:

$ ssh-add -t 1800 # 1800 seconds

$ ssh-add -t 45m # 45 minutes

$ ssh-add -t 3h42 # 3 hours 42 minutes

请记住,您可以将GNOME/KDE或macOS桌面配置为在登录时自动运行ssh-agent和解锁密钥。
例如:

使用ssh-agent进行ssh/sftp/scp命令认证

将私钥(或私钥)添加到ssh-agent后,您要做的就是使用ssh,sftp,scp和所有其他ssh命令。
例如,我将为FreeBSD备份服务器执行ssh命令:

$ ssh user@server

$ ssh user@hostname_or_ip

$ scp file.doc [email protected]:~/Documents/

# State the private key for public key authentication #

$ ssh -i ~/.ssh/aws-web-servers ec2-user@rhel8-web-server

$ ssh -i ~/.ssh/linode-theitroad-servers [email protected]

$ ssh [email protected]

如何列出我的ssh-agent缓存的私钥

运行以下命令以列出所有身份/私钥的指纹:

$ ssh-add -l
256 SHA256:uym82.....6VLU Hyman@theitroad (ED25519)
2048 SHA256:GVs...S0AA root@backup-servers (RSA)
3072 SHA256:VLg8...SCDFpA key for local lxds (RSA)

要查看列出所有身份的所有公钥参数:

$ ssh-add -L

删除所有缓存的ssh-agent私钥

将-D选项传递给ssh-add命令:

$ ssh-add -D

您将在屏幕上看到如下确认信息:

All identities removed.