Übergib ssh2 den über SOCKS geöffneten Socket
Handle zuerst die SOCKS-Verbindung aus und übergib dann ihren Ziel-Socket an ssh2, bevor das SFTP-Subsystem geöffnet wird.
ssh2 nimmt über seine Option sock einen bereits verbundenen Stream an. Lass socksv5 die Route zum SSH-Server aufbauen und übergib diesen Stream dann an SSH:
const socks = require('socksv5');
const { Client } = require('ssh2');
const connection = socks.connect({
host: sshConfig.host,
port: sshConfig.port || 22,
proxyHost: 'proxy.example',
proxyPort: 1080,
localDNS: false,
auths: [socks.auth.None()],
}, socket => {
const ssh = new Client();
ssh.on('error', error => console.error(error.message));
ssh.on('ready', () => {
ssh.sftp((error, sftp) => {
if (error) {
console.error(error.message);
ssh.end();
return;
}
sftp.readdir('.', (error, entries) => {
if (error) console.error(error.message);
else console.log(entries);
ssh.end();
});
});
});
ssh.connect({ ...sshConfig, sock: socket });
});
connection.on('error', error => console.error(error.message));
sshConfig ist die vorhandene SSH-Konfiguration der Anwendung, einschließlich Konto, Schlüssel und hostVerifier-Richtlinie. SOCKS-Host und -Port benennen den Vermittler; sshConfig.host und port benennen den endgültigen SSH-Dienst.
Das Beispiel verwendet einen SOCKS-Endpunkt ohne Authentifizierung. Für einen aus dem öffentlichen Internet erreichbaren SSH-Server kann die SOCKS5-Proxy-Liste Kandidaten liefern; jeder muss weiterhin das SSH-Ziel und den Port zulassen. Für dessen Benutzername/Passwort-Verfahren verwende socks.auth.UserPassword(proxyUser, proxyPassword) in auths. Diese Zugangsdaten ersetzen nicht das SSH-Konto.
localDNS false übergibt den Ziel-Hostnamen an den SOCKS-Server und nutzt die Zielauflösung auf der Proxy-Seite. Ohne diese ausdrückliche Wahl versucht socksv5 in der dokumentierten Voreinstellung die lokale Auflösung.
Der SOCKS-Callback läuft nach dem Aushandeln. Warte auf das ready-Ereignis von ssh2, bevor SFTP angefordert wird. Das sind getrennte erfolgreiche Phasen; weder eine TCP-Verbindung zum Proxy noch eine SOCKS-Antwort belegt, dass die SSH-Authentifizierung oder das SFTP-Subsystem erfolgreich war.