我正在尝试设置一些客户端,以便每个客户端都可以通过一台服务器 ssh 连接。
我已经为ssh-agent
服务器创建了一个服务。
从systemctl --user status ssh-agent.service
我这里可以看到一个pid:
● ssh-agent.service - SSH authentication agent
Loaded: loaded (/etc/xdg/systemd/user/ssh-agent.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-08-01 17:31:59 CEST; 9min ago
Main PID: 2761 (ssh-agent)
CGroup: /user.slice/user-1000.slice/[email protected]/ssh-agent.service
└─2761 /usr/bin/ssh-agent -a /run/user/1000/ssh-agent.socket -D
Aug 01 17:31:59 node0 systemd[880]: Started SSH authentication agent.
Aug 01 17:31:59 node0 ssh-agent[2761]: SSH_AUTH_SOCK=/run/user/1000/ssh-agent.socket; export SSH_AUTH_SOCK;
Aug 01 17:31:59 node0 ssh-agent[2761]: echo Agent pid 2761;
是否可以eval "$(ssh-agent)"
使用这个 pid 来ssh-add
访问这个实例。
问题是我必须手动注销并再次登录,才能添加到正确的 ssh-agent?
答案1
的输出ssh-agent
由设置环境变量的 shell 代码SSH_AUTH_SOCK
和组成SSH_AGENT_PID
。两者都在引号中的输出中。因此,在bash
或/bin/sh
shell 中运行这些命令后,从该 shell 启动的任何进程都将使用正在运行的代理:
SSH_AUTH_SOCK=/run/user/1000/ssh-agent.socket;导出SSH_AUTH_SOCK SSH_AGENT_PID=2761;导出SSH_AGENT_PID
笔记:
SSH_AUTH_SOCK
和的值SSH_AGENT_PID
必须从systemctl
命令中获取,因为每次启动服务时它们通常都会不同。- 只有从运行命令的 shell 进程启动的进程才会在其环境中具有导出的变量,因此只有这些进程才会使用正在运行的代理。