AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / unix / 问题 / 740871
Accepted
elbarna
elbarna
Asked: 2023-03-25 07:32:03 +0800 CST2023-03-25 07:32:03 +0800 CST 2023-03-25 07:32:03 +0800 CST

ssh-agent:它是如何工作的?

  • 772

我想尝试 ssh-agent 免密码登录(我已经知道 gssapi 和 pubkey 方法,但我想学习这个)。在客户端和服务器上,我在 ssh_config(客户端)和 sshd_config(服务器)上启用了 AgentForward

在客户端,我启动 ssh-agent

eval `ssh-agent`

我添加我的 rsa 密钥

ssh-add

ssh-add -l 确认有效

ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)

然后我登录并询问密码

ssh remotehost

远程主机上的 ssh-add -l 确认它有效

ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)

现在我打开另一个 shell,ssh 到远程主机并..再次询问密码。如果我现在注销并登录..再次询问密码。怎么了?

我还尝试创建一个新的 rsa 密钥,添加密码,使用 ssh-add 添加 .. 仍然询问密码。

ssh-agent
  • 2 2 个回答
  • 47 Views

2 个回答

  • Voted
  1. telcoM
    2023-03-25T08:22:35+08:002023-03-25T08:22:35+08:00

    如果您在终端窗口中手动启动ssh-agent,则代理功能将在该窗口中可用,并且只能从该窗口启动进程。要使代理在 GUI 会话的所有终端窗口中可用,您需要将代理作为 GUI 会话设置的一部分启动。

    您的发行版可能已经或可能没有一些设施来允许这样做:一个可选的 PAM 模块pam_ssh.so可以做到这一点,或者 Debian 和相关发行版可以通过/etc/X11/Xsession.options(man 5 Xsession.options有关更多信息,请参阅 )为 X11 会话启用 SSH 代理。其他发行版可能有其他解决方案。

    从技术上讲,当 SSH 代理启动时,它会创建一个 Unix 套接字,允许 SSH 客户端与代理通信,环境变量SSH_AUTH_SOCK用于识别其位置。当您使用代理转发时,sshd远程主机的 将为转发的代理连接创建一个类似的套接字和环境变量。

    如果您在一个本地终端窗口中启动代理,然后将此环境变量复制到另一个也运行本地 shell 的终端,那么您应该能够在两个终端中使用手动启动的代理。但通常最好找到一个将代理作为 GUI 会话设置的一部分启动的解决方案,这样环境SSH_AUTH_SOCK变量就已经设置好,并且会被该会话中启动的所有终端自动继承。

    请注意,如果远程主机的管理员认为有必要,他们可以禁止 SSH 代理转发。

    • 2
  2. Best Answer
    elbarna
    2023-03-25T08:33:05+08:002023-03-25T08:33:05+08:00

    找到解决方案。

    在我认为(错误的)ssh-agent“缓存”密码之前

    a)你启动代理

    b) 进入远程主机

    c)密码进入神秘的“缓存”

    d) 您可以再次进入远程主机,并且不会询问密码,因为已缓存!完全错了。

    使用ssh有两种免密码进入方式

    1. 使用 kerberos 或 AD(使用 kerberos)的单点登录

    2. 公钥

    ssh-agent 只能“转发”私钥,例如:

    我启动 ssh-agent

    eval `ssh-agent`
    Agent pid 26541
    

    我添加密钥(我使用默认密钥,但您可以指定使用 ssh-keygen 命令创建的另一个密钥,有或没有密码)。

    ssh-add
    

    为了让事情最清楚

    local = my local machine
    server1 = first remote server
    server2 = second remote server
    

    我在 server1 上远程登录,现在因为 ssh-agent 被“转发”,即使 server1 没有 pubkey(在本地),我也可以在 server2 上不输入密码就从 server1 登录。在 server2 上,我在 .ssh/authorized_keys 上有密钥(公共)

    ssh -A server1 #ask password
    ssh server2 #don't ask password, from server1
    

    如果未启用 ssh-agent

    ssh -A server1 #ask password
    ssh server2 #ask password.
    

    gif 解释得更好,用户“pino”在没有密码的情况下从远程主机“fedora”进入远程主机“debian”(要在没有密码的情况下进入,您必须将 slack64 的公钥复制到主机 debian 上的 $HOME/.ssh/authorized_keys 文件中在此示例中),但是当它终止 ssh-agent 并重试输入失败时(如果您提醒密码,您当然可以输入)。

    在此处输入图像描述

    • 0

相关问题

  • 如何使用 ssh-agent 作为包装程序?

  • 命令行的 SSH_AUTH_SOCK 的替代品

  • 如何使用 ssh-agent 抑制主机密钥检查

  • 让 ssh-agent 始终使用同一个套接字是否存在安全风险?

  • ssh 服务器:使用密码控制 ssh-key 保护

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    模块 i915 可能缺少固件 /lib/firmware/i915/*

    • 3 个回答
  • Marko Smith

    无法获取 jessie backports 存储库

    • 4 个回答
  • Marko Smith

    如何将 GPG 私钥和公钥导出到文件

    • 4 个回答
  • Marko Smith

    我们如何运行存储在变量中的命令?

    • 5 个回答
  • Marko Smith

    如何配置 systemd-resolved 和 systemd-networkd 以使用本地 DNS 服务器来解析本地域和远程 DNS 服务器来解析远程域?

    • 3 个回答
  • Marko Smith

    dist-upgrade 后 Kali Linux 中的 apt-get update 错误 [重复]

    • 2 个回答
  • Marko Smith

    如何从 systemctl 服务日志中查看最新的 x 行

    • 5 个回答
  • Marko Smith

    Nano - 跳转到文件末尾

    • 8 个回答
  • Marko Smith

    grub 错误:你需要先加载内核

    • 4 个回答
  • Marko Smith

    如何下载软件包而不是使用 apt-get 命令安装它?

    • 7 个回答
  • Martin Hope
    user12345 无法获取 jessie backports 存储库 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl 为什么大多数 systemd 示例都包含 WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky 如何将 GPG 私钥和公钥导出到文件 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll systemctl 状态显示:“状态:降级” 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim 我们如何运行存储在变量中的命令? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S 为什么 /dev/null 是一个文件?为什么它的功能不作为一个简单的程序来实现? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 如何从 systemctl 服务日志中查看最新的 x 行 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - 跳转到文件末尾 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla 为什么真假这么大? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis 在一个巨大的(70GB)、一行、文本文件中替换字符串 2017-12-30 06:58:33 +0800 CST

热门标签

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve