Чтобы передать текст на вводе и прочитать вывод внешней команды, необходимо перенаправить в pipes как stdout так и stdin дочернего процесса (Popen(.., stdin=PIPE, stdout=PIPE)). Можно использовать subprocess.check_output() обёртку, которая за вас это сделает:
>>> from subprocess import check_output
>>> check_output('cat', input='текст', encoding='utf-8')
'текст'
encoding параметр задаётся, чтобы указать кодировку текстовых данных (процесс принимает/отдаёт байты внутри).
Если команда завершается с ошибкой (ненулевой код возврата), то check_output() выбрасывает исключение CalledProcessError. Чтобы изменить это поведение можно напрямую subprocess.run() функцию вызвать или если хотите взаимодействовать с командой, пока она ещё выполняется, не дожидаясь окончания, тогда до уровня subprocess.Popen() можно опуститься.
Может быть вариант (вероятен, для принятия пароля), что процесс ожидает ввод не на своём стандартном вводе (stdin), а напрямую с терминала (tty). См. Библиотека subprocess и ssh не дружат. И, конечно, стоит рассмотреть заход по ssh с использованием ключей, без явного ввода пароля. Например, How can I set up password-less SSH login?