Зачем вам нужен пароль, если вы используете закрытый ключ?Вы имеете в виду пароль для файла ключей?Я думаю, что это может быть проблемой, потому что ssh принимает аутентификацию с использованием паролей только в функциях tty и php * exec, не так ли.
Для вопроса сна вы можете попробовать опцию -N
ssh, которая полезнадля туннелей и не требует выполнения удаленной команды.Попробуйте установить туннель с помощью оболочки, а затем просто подключитесь к этому туннелю с помощью php.
Обновление:
Я пробовал это, и это работает на моем Mac
<?
exec('ssh -f -N -n -L 5500:localhost:3306 your-host-name &> /dev/null');
var_dump(mysql_connect('127.0.0.1:5500', 'root'));
Вы должны добавить опцию -i и заменить имя хоста.
Это вывод на моем компьютере
resource(9) of type (mysql link)
Но имейте в виду, что у вас возникнет пара проблем с этим,Оператор &> /dev/null
немедленно возвращает функцию exec, но он подавляет любые выходные данные (в основном ошибки) при многократном выполнении сценария, поскольку каждый новый запрос будет пытаться открыть новое соединение, он будет успешным, но не сможет настроитьтуннель, потому что порт 5500 уже используется.Через некоторое время на вашем компьютере будет запущено много процессов ssh.
Чтобы избежать этого, вы должны попытаться подключиться к mysql перед вызовом ssh, а если вы не можете настроить туннель и повторитьMySQL подключиться вызов.Таким образом, вы можете решить проблему.