Typescript: ssh2-sftp-client problemi s povezivanjem na SFTP server dok FileZilla može


Opsežno sam pretraživao Stack Overflow i Google i još uvijek nisam pronašao rješenje.

Korištenjem Typescripta, node v16.18.0 i ssh2-sftp-klijenta, kod ispod može se uspješno povezati na moj sftp poslužitelj (hostiran na IIS-u) koji zahtijeva korisničko ime, lozinku i privatni ključ.

let sftp = new Client();
// sftp.tryKeyboard = true;
let conn = await sftp
    .connect({
        protocal: 'sftp',
        host: '##.##.##.##',
        port: 22,
        username: 'someUserName',
        remotePath: 'somePaht',
        password: 'somePassword',
        privateKey: key,
        // tryKeyboard: true,   
    })
    .then(async() => {
        // return;
        console.log('You connected!');
    })
    .catch((err: any) => {
        console.log(err, 'catch error');
    });

Međutim, korištenjem potpuno istog koda, ali s parametrima veze za drugi SFTP poslužitelj (hostan na Linuxu) koji zahtijeva korisničko ime i privatni ključ, ali ne i lozinku, ne uspijeva se uspostaviti veza.

let sftp = new Client();
// sftp.tryKeyboard = true;
let conn = await sftp
    .connect({
        protocal: 'sftp',
        host: '##.##.##.##',
        port: 22,
        username: 'gp',
        remotePath: 'gp',
        //password: 'NA',
        privateKey: key,
        // tryKeyboard: true,   
    })
    .then(async() => {
        // return;
        console.log('You connected!');
    })
    .catch((err: any) => {
        console.log(err, 'catch error');
    });

i ovo je pogreška koju dobivam koristeći gore navedeni kod:

Greška: connect: getConnection: Sve konfigurirane metode autentifikacije nisu uspjele u SftpClient.fmtError (D:\app\node_modules\ssh2-sftp-client\src\index.js:111:22) u SftpClient.connect (D:\app\node_modules\ssh2-sftp-client\src\index.js:249:37) u processTicksAndRejections (node:internal/process/task_queues:96:5) u async getSftpConnection (D:\app\index.ts:67:12) { code: 'ERR_GENERIC_CLIENT', custom: true } catch error

Kao test koristio sam potpuno iste vrijednosti za povezivanje koristeći FileZilla FTP klijent i povezuje se bez problema. Nemam administratorski pristup Linux serveru pa ne mogu dobiti dodatne informacije o njegovoj konfiguraciji, ali mogu potvrditi da ove vrijednosti parametara veze rade u FileZilli. Očito FileZilla radi nešto što ja ne radim.

Ovo je osnovna konfiguracija u FileZilla:

i mapa s kojom je bila povezana:

Kako mogu riješiti ovaj problem? Kako mogu dobiti dodatne informacije o tome što uzrokuje neuspjeh veze?

Hvala.

Odgovor #1

Ispostavilo se da je tip ključa koji sam koristio bio rsa. IIS je puno popustljiviji nego Linux. Da bi ovo radilo na Linux sftp-u, morao sam dodati ove 2 linije u konfiguracijsku datoteku

hostkeyalgorithms=ssh-rsa,[email 
pubkeyacceptedalgorithms=+ssh-rsa,[email 

datoteka s konfiguracijom nalazi se na:

/etc/ssh/sshd_config

Međutim, na ovom snimku zaslona možete vidjeti da su te 2 linije zakomentirane. To je zato što sam ih nakon što sam ovo uspio pokrenuti zakomentirao i pokušao koristiti ključ u ED25519 formatu, što je uspjelo.

Ukratko, trebao sam koristiti ED25519 tip ključa kako ne bih morao petljati s Linux serverom. Ali ako želim koristiti RSA ključ, onda dodajte gore spomenute 2 linije u konfiguracijsku datoteku.