Мне было поручено подключение к SFTP-серверу на базе Windows, для которого требуется ключ И пароль для подключения к нему.
Я разработал, как подключиться с помощью пароля или ключа, но я не могу понять, как сделать это с обоими.
Подключиться через ключ:
//connect to server
$connection = ssh2_connect($SSH_ipadd, 22, array('hostkey'=>'ssh-rsa,ssh-dss'));
if(ssh2_auth_pubkey_file($connection, $SSH_user, $SSH_public_key, $SSH_private_key)){
echo "connected successfully.";
}else{
echo "did not connect correctly.";
}
Связаться с пользователем / пароль:
//connect to server via ssh in preperation for sftp
$connection = ssh2_connect($SSH_ipadd, 22);
//check connectivity
if(ssh2_auth_password($connection, $SSH_user, SSH_Password)){
echo "connected successfully.";
}else{
echo "did not connect correctly.";
}
Но я не уверен, как сделать оба сразу.
Когда я пытаюсь подключиться к серверу с помощью интерфейса командной строки
ssh -i private.key [email protected]
После аутентификации ключа мне будет предложено ввести пароль. Как только это было аутентифицировано, оно регистрирует меня на SFTP-сервере.
Как бы я использовал PHP для аутентификации на этом типе сервиса, а затем для загрузки файлов и т. Д.?
phpseclib может это сделать. Вот пример использования v1.0:
<?php
include('Net/SSH2.php');
include('Crypt/RSA.php');
$rsa = new Crypt_RSA();
$rsa->loadKey(file_get_contents('...'));
$ssh = new Net_SSH2('www.domain.tld');
if (!$ssh->login('username', 'password', $rsa)) {
exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>
Других решений пока нет …