首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >代理:它是如何工作的?

代理:它是如何工作的?
EN

Unix & Linux用户
提问于 2023-03-24 23:32:03
回答 2查看 103关注 0票数 0

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

在客户端,我启动ssh代理

代码语言:javascript
运行
复制
eval `ssh-agent`

我加了我的rsa键

代码语言:javascript
运行
复制
ssh-add

添加-l确认其工作正常

代码语言:javascript
运行
复制
ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)

然后我登录并询问密码

代码语言:javascript
运行
复制
ssh remotehost

ssh-在远程主机上添加-l确认其工作正常

代码语言:javascript
运行
复制
ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)

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

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

EN

回答 2

Unix & Linux用户

回答已采纳

发布于 2023-03-25 00:33:05

找到解决办法了。

在我认为(错误)ssh代理“缓存”密码之前

( a)你启动代理人

( b)输入远程主机

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

( d)您可以再次输入远程主机,并且不询问密码,因为它是缓存的!完全错了。

对于ssh,有两种不用密码进入的方法。

  1. 单点登录使用kerberos或AD (使用kerberos)
  2. 酒吧钥匙

ssh代理只能“转发”私钥,例如:

我启动ssh-代理

代码语言:javascript
运行
复制
eval `ssh-agent`
Agent pid 26541

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

代码语言:javascript
运行
复制
ssh-add

让事情变得更清楚

代码语言:javascript
运行
复制
local = my local machine
server1 = first remote server
server2 = second remote server

我现在在server1上远程登录,因为ssh-agent被“转发”了,我可以在server2上登录而无需输入来自server1的密码,即使server1没有公开密钥(在本地)。在server2上,我在..ssh/authorized_ key上拥有密钥(公共)

代码语言:javascript
运行
复制
ssh -A server1 #ask password
ssh server2 #don't ask password, from server1

如果ssh-agent未启用

代码语言:javascript
运行
复制
ssh -A server1 #ask password
ssh server2 #ask password.

gif解释得更好,用户"pino“不带密码从远程主机"fedora”输入远程主机" debian“(在本例中,没有密码输入必须在主机debian上的$HOME/.ssh/ slack64 _key文件中复制slack64的公钥),但是当它杀死ssh代理并重新尝试输入失败时(如果您提醒密码,当然可以输入)。

票数 0
EN

Unix & Linux用户

发布于 2023-03-25 00:22:35

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

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

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

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

请注意,如果远程主机的管理员认为有必要,可以不允许SSH代理转发。

票数 2
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/740871

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档