1) Я не знаю, просто ли это, но есть http://www.libssh.org/ из IIRC, те же самые люди, которые делают cURL
2) Да, вам, вероятно, следует сделать это с помощью «системной функции» сценария оболочки (или system / popen, если вам абсолютно необходимо иметь результаты внутри программы на C), поскольку это сэкономит вам много неприятностей перевоплощать вещи.
3) Открытые ключи - да; и хотя возможно повторное использование открытых ключей на нескольких хостах / пользователях, это не очень хорошая практика безопасности; Лучше было бы сгенерировать пару ключей для каждого пользователя / хоста, а затем добавить открытый ключ в .ssh / authorized_keys на компьютере, к которому нужно подключиться. Это означает, что отзыв ключей - это просто удаление строки в одном текстовом файле вместо регенерации ключа для нескольких хостов. Однако, если он не чувствителен к безопасности, или если безопасность просто не имеет значения в этом случае (!), То использование одного ключа может быть не слишком безумным. То есть, если вам нужно несколько клиентов для проверки существования на одном хосте; если нет, пожалуйста, обновите ваш вопрос, чтобы быть более ясным в этом отношении.