mirror of
https://github.com/linux-odyssey/linux-odyssey.git
synced 2026-11-05 19:20:12 +08:00
46 lines
1.0 KiB
TypeScript
46 lines
1.0 KiB
TypeScript
import { Client } from 'ssh2'
|
|
import { Duplex } from 'stream'
|
|
import config from '../config.js'
|
|
|
|
export async function connectToSSH(
|
|
containerIp: string,
|
|
{ token }: { token: string }
|
|
): Promise<Duplex> {
|
|
const conn = new Client()
|
|
|
|
return new Promise((resolve, reject) => {
|
|
conn
|
|
.on('ready', () => {
|
|
conn.shell(
|
|
{
|
|
env: {
|
|
TOKEN: token,
|
|
API_ENDPOINT: config.backendUrl,
|
|
ZDOTDIR: '/etc/zsh',
|
|
NODE_PATH: '/usr/src/node_modules',
|
|
},
|
|
},
|
|
(err, stream) => {
|
|
if (err) {
|
|
reject(err)
|
|
}
|
|
stream.on('close', () => {
|
|
conn.end()
|
|
})
|
|
resolve(stream)
|
|
}
|
|
)
|
|
})
|
|
.on('error', (err) => {
|
|
reject(err)
|
|
})
|
|
.connect({
|
|
host: containerIp,
|
|
port: 22,
|
|
username: 'commander',
|
|
privateKey: config.docker.keypair.privateKey,
|
|
timeout: 5000,
|
|
})
|
|
})
|
|
}
|