I don't believe you can log into the user's ftp server with their public key.
What should happen is that you ask the client to create an account for your server on their SFTP server and you give them YOUR public key so that you can operate as a client to their server.
Regarding Laravel setup, this is what I do;
$filesystem = Storage::createSFtpDriver([
'host' => $system->ftphost,
'username' => decrypt($system->ftpuser),
'password' => decrypt($system->ftppass),
'port' => '22',
//'root' => '',
// 'passive' => true,
// 'ssl' => true,
'timeout' => '10',
]);
// example use
$files = collect($filesystem->listContents($system->ftppath, false));
here I am getting the credentials from a model (system) which could be per customer. The username and password is encrypted in the DB.
More info on the Fly system site https://flysystem.thephpleague.com/docs/adapter/sftp-v3/