Я понимаю, что этот вопрос часто задают, в основном, люди, которые хотят перехватить фазу запроса пароля SSH.Это не то, что я хочу.Я после текста после входа в систему.
Я хочу написать оболочку для ssh, который действует как посредник между SSH и терминалом.Я хочу эту конфигурацию:
(typing on keyboard / stdin) ----> (wrapper) ----> (ssh client)
и то же самое для вывода из SSH:
(ssh client) -----> (wrapper) -----> stdout
Кажется, я могудобиться эффекта, которого я хочу для stdout, выполнив стандартный трюк, который я нашел в Интернете (упрощенный код):
pipe(fd)
if (!fork()) {
close(fd[READ_SIDE]);
close(STDOUT_FILENO); // close stdout ( fd #1 )
dup(fd[WRITE_SIDE]); // duplicate the writing side of my pipe ( to lowest # free pipe, 1 )
close(STDERR_FILENO);
dup(fd[WRITE_SIDE]);
execv(argv[1], argv + 1); // run ssh
} else {
close(fd[WRITE_SIDE]);
output = fdopen(fd[READ_SIDE], "r");
while ( (c = fgetc(output)) != EOF) {
printf("%c", c);
fflush(stdout);
}
}
Как я уже сказал, я думаю, что это работает.Тем не менее, я не могу сделать наоборот.Я не могу закрыть (STDIN_FILENO) и дублировать канал чтения канала.Кажется, что SSH обнаруживает это и предотвращает это.Я читал, что могу использовать опцию "-t -t", чтобы заставить SSH игнорировать не входящий в stdin характер его ввода;но когда я пытаюсь это сделать, он все равно не работает.
Есть какие-нибудь намеки?
Большое спасибо!