我想尝试一下ssh-agent在没有密码的情况下登录(我已经知道了gssapi和pubkey方法,但我想学习这个)。在客户机和服务器上,我启用了AgentForward On ssh_config (客户端)和sshd_config (服务器)
在客户端,我启动ssh代理
eval `ssh-agent`
我加了我的rsa键
ssh-add
添加-l确认其工作正常
ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)
然后我登录并询问密码
ssh remotehost
ssh-在远程主机上添加-l确认其工作正常
ssh-add -l
4096 SHA256:******** mysuser@mylocalhost (RSA)
现在我打开另一个shell,ssh到远程主机and..ask,再次打开密码。如果我注销并再次登录now..ask密码。怎么了?
我还尝试创建一个新的rsa键,添加一个密码,使用ssh- add .添加,然后仍然询问密码。
发布于 2023-03-25 00:33:05
找到解决办法了。
在我认为(错误)ssh代理“缓存”密码之前
( a)你启动代理人
( b)输入远程主机
( c)密码进入神秘的“缓存”
( d)您可以再次输入远程主机,并且不询问密码,因为它是缓存的!完全错了。
对于ssh,有两种不用密码进入的方法。
ssh代理只能“转发”私钥,例如:
我启动ssh-代理
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被“转发”了,我可以在server2上登录而无需输入来自server1的密码,即使server1没有公开密钥(在本地)。在server2上,我在..ssh/authorized_ key上拥有密钥(公共)
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“(在本例中,没有密码输入必须在主机debian上的$HOME/.ssh/ slack64 _key文件中复制slack64的公钥),但是当它杀死ssh代理并重新尝试输入失败时(如果您提醒密码,当然可以输入)。
发布于 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代理转发。
https://unix.stackexchange.com/questions/740871
复制相似问题