SSH 服务详解 (三)-- 使用 SSH 代理

SSH服务详解(一)–Linux SSH 服务器与客户端的安装与启动

SSH服务详解(二)–使用私钥登录 SSH 服务器(免密登录)

SSH 服务详解 (三)-- 使用 SSH 代理

SSH 服务详解 (四)-- 本地调用远程主机的命令

SSH 服务详解 (五)-- 远程文件拷贝

SSH 服务详解 (六)-- Windows SSH 主机

SSH 服务详解 (七)-- SSH 连接 Github

SSH服务详解(八)– vscode 通过 SSH 远程连接 linux 服务器

  • SSH 服务器运行在 ubuntu 18.04.1
  • SSH 客户端在 Windows10

上一小节中使用命令

ssh -i .\id_rsa  tyustli@192.168.10.18

可以使用 SSH 远程连接到 SSH 服务器,但是每次都需要指定秘钥,本小节就梳理一下 SSH 代理相关的知识,有了 SSH 代理之后就不需要自己每次手动输入秘钥了

SSH 代理使用步骤

  • 启动 SSH 代理程序
  • 将对应私钥添加到 ssh 代理中,在添加私钥时,如果提示输入私钥的密码,正确的输入私钥密码即可将私钥添加到 ssh 代理中
  • 连接到远程用户
  • 私钥管理

SSH 代理介绍

ssh 代理是一个程序,它可以帮助我们管理私钥,ssh-agent 即为 ssh 代理程序

那么什么时候需要 ssh 代理帮助我们管理私钥呢?当遇到如下情况时,我们会需要 ssh 代理。

  • 使用不同的密钥连接到不同的主机时,每次都需要手动指定对应的密钥,ssh 代理可以帮助我们选择对应的密钥进行认证,不用手动指定密钥即可进行连接

  • 当私钥设置了密码,我们又需要频繁的使用私钥进行认证时,ssh 代理可以帮助我们免去重复的输入密码的操作

启动 SSH 代理

以管理员身份启动 powershell ,在 powershell 输入如下命令

ssh-agent

如果启动失败,会报错,例如错误

unable to start ssh-agent service, error :1058

设置 SSH 代理程序自动启动

Set-Service -Name ssh-agent -StartupType Automatic

StartupType 类型可以取如下参数

  • Automatic 2
    指示服务将由(或已由)操作系统在系统启动时启动。 如果一个自动启动的服务依赖于手动启动的服务,则该手动启动的服务也会在系统启动时自动启动。

  • Boot 0
    指示该服务是由系统加载程序启动的设备驱动程序。 此值仅对设备驱动程序有效。

  • Disabled 4
    指示服务已禁用,因此无法由用户或应用程序启用。

  • Manual 3
    指示服务仅由用户(使用服务控制管理器)或应用程序以手动方式启动。

  • System 1
    指示该服务是由 IOInitSystem 函数启动的设备驱动程序。 此值仅对设备驱动程序有效。

上述命令设置 SSH 代理程序自动启动,再次在 powershell 命令行中输入 ssh-agent 命令即可启动 SSH 代理程序
启动之后查看 SSH 代理程序

ps

命令执行之后结果如下

Handles  NPM(K)    PM(K)      WS(K)     CPU(s)     Id  SI ProcessName
-------  ------    -----      -----     ------     --  -- -----------
  ...
  80       7     1388       5688       0.02  26776   0 ssh-agent
  609      32    31456      72296       6.03   6916   1 StartMenuExperienceHost
  ..

如果想关闭 SSH 代理程序,使用命令

kill 26776 // kill pid

询问是否关闭 SSH 代理程序

确认
是否确实要针对以下项执行 Stop-Process 操作: ssh-agent(26776)?
[Y](Y)  [A] 全是 (A)  [N](N)  [L] 全否 (L)  [S] 暂停 (S)  [?] 帮助 (默认值为 “Y”): Y

输入 Y 即可

添加 SSH 私钥

私钥添加,将私钥交给 SSH 代理程序管理

ssh-add .\id_rsa

添加过程中会报错

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for '.\\id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.

这里提示私钥文件文件添加失败,原因是太多用户可以访问这个私钥,该私钥被忽略。所以需要修改私钥文件的权限

在 Linux 中可以使用 chmod 命令,但是 Windows 并没有这个命令

在 windows 中对应的命令是 icacls

具体 icacls/cacls 的命令参数可以参看相关的帮助文档(powershell 直接输入命令即可查看命令帮助)

给系统用户读取权限

 icacls .\id_rsa /c /t /grant system:R

禁用继承

icacls .\id_rsa /c /t /inheritance:r

给当前用户读取权限

 icacls .\id_rsa /c /t /grant tyustli:R # tyustli 为当前用户名

上述命令均会有如下命令执行结果

已处理的文件: .\id_rsa
已成功处理 1 个文件; 处理 0 个文件时失败

还有一种错误是

invalid format 

这是因为 Linux 和 windows 两种系统对换行的处理不一样,Liunx 中换行 \n 但是在 windows 中换行是 \r\n

文件权限修改完成之后再次输入

ssh-add .\id_rsa

提示 SSH 私钥添加成功

Identity added: .\id_rsa (.\id_rsa)

远程连接

私钥添加到 SSH 代理程序之后,直接连接即可

ssh tyustli@192.168.10.18

此时不需要指定私钥,也不需要输入登录密码即可直接连接(如果私钥有密码,需要输入私钥的密码)

退出连接

exit

私钥管理

查看私钥管理相关命令

ssh-add --help
  -l          List fingerprints of all identities.
  -E hash     Specify hash algorithm used for fingerprints.
  -L          List public key parameters of all identities.
  -k          Load only keys and not certificates.
  -c          Require confirmation to sign using identities
  -t life     Set lifetime (in seconds) when adding identities.
  -d          Delete identity.
  -D          Delete all identities.
  -x          Lock agent.
  -X          Unlock agent.
  -s pkcs11   Add keys from PKCS#11 provider.
  -e pkcs11   Remove keys provided by PKCS#11 provider.
  -q          Be quiet after a successful operation.
Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐