45 行
1.3 KiB
C
45 行
1.3 KiB
C
/* pssh agent —— SSH Agent 守护进程 (平替 ssh-agent)
|
|
*
|
|
* 提供 Windows 命名管道 \\.\pipe\openssh-ssh-agent
|
|
* 与 POSIX unix socket $SSH_AUTH_SOCK(缺省 /tmp/paze-agent.sock)。
|
|
*
|
|
* 用法:
|
|
* paze-agent (前台运行,Ctrl+C 退出)
|
|
*/
|
|
#include "paze/ssh_agent.h"
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifdef _WIN32
|
|
#include <windows.h>
|
|
#else
|
|
#include <signal.h>
|
|
#endif
|
|
|
|
int pssh_cmd_agent(int argc, char **argv) {
|
|
if (argc < 2) {
|
|
fprintf(stderr,
|
|
"用法: pssh agent\n"
|
|
"启动 SSH agent 守护进程(无参数,前台运行,Ctrl+C 退出)\n"
|
|
"相关命令: pssh add <keyfile> 添加密钥, pssh add -l 列出身份\n\n");
|
|
/* 显示用法后继续启动守护进程 */
|
|
} else {
|
|
fprintf(stderr, "paze-agent: unknown option '%s' (pssh agent 无参数)\n", argv[1]);
|
|
return 1;
|
|
}
|
|
#ifdef _WIN32
|
|
fprintf(stderr, "paze-agent: listening on \\\\.\\pipe\\openssh-ssh-agent\n");
|
|
#else
|
|
const char *path = getenv("SSH_AUTH_SOCK");
|
|
if (!path) path = "/tmp/paze-agent.sock";
|
|
fprintf(stderr, "paze-agent: listening on %s\n", path);
|
|
#endif
|
|
fprintf(stderr, "paze-agent: running (Ctrl+C to stop)\n");
|
|
fflush(stderr);
|
|
|
|
int rc = ssh_agent_daemon();
|
|
if (rc != 0)
|
|
fprintf(stderr, "paze-agent: failed to start agent\n");
|
|
return rc;
|
|
}
|