fix(file-provider): SSHFileProvider 支持自定义端口 (#1181)
之前 SSHFileProvider 的 sshArgs() 方法硬编码使用默认端口 22, 完全忽略 TERMINAL_SSH_PORT 环境变量配置的自定义 SSH 端口。 修复内容: - TerminalConfig 接口新增 ssh_port 字段 - SSHFileProvider 构造函数新增 port 参数 - sshArgs() 在 this.port 存在时追加 -p <port> - getSSHEnvVars() 读取 TERMINAL_SSH_PORT 并解析为整数 - createFileProvider() 工厂函数传入 ssh.port 影响范围:所有通过 SSH 后端的文件操作(读/写/列出/删除/重命名/创建目录/复制/上传)
This commit is contained in:
@@ -61,6 +61,7 @@ export interface TerminalConfig {
|
||||
docker_container_name?: string
|
||||
cwd?: string
|
||||
singularity_image?: string
|
||||
ssh_port?: number
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -421,18 +422,20 @@ export class SSHFileProvider implements FileProvider {
|
||||
private host: string
|
||||
private user: string
|
||||
private keyPath?: string
|
||||
private port?: number
|
||||
private homeDir: string
|
||||
|
||||
constructor(host: string, user: string, keyPath?: string, homeDir = getActiveProfileDir()) {
|
||||
constructor(host: string, user: string, keyPath?: string, homeDir = getActiveProfileDir(), port?: number) {
|
||||
this.host = host
|
||||
this.user = user
|
||||
this.keyPath = keyPath
|
||||
this.port = port
|
||||
this.homeDir = homeDir
|
||||
}
|
||||
|
||||
private sshArgs(): string[] {
|
||||
// StrictHostKeyChecking disabled for automated tooling with user-configured hosts
|
||||
const args = ['-o', 'StrictHostKeyChecking=no', '-o', 'BatchMode=yes']
|
||||
if (this.port) args.push('-p', String(this.port))
|
||||
if (this.keyPath) args.push('-i', this.keyPath)
|
||||
args.push(`${this.user}@${this.host}`)
|
||||
return args
|
||||
@@ -740,7 +743,7 @@ export function getTerminalConfig(profile?: string): TerminalConfig {
|
||||
/**
|
||||
* Read SSH env vars from hermes .env file.
|
||||
*/
|
||||
function getSSHEnvVars(profile?: string): { host?: string; user?: string; key?: string } {
|
||||
function getSSHEnvVars(profile?: string): { host?: string; user?: string; key?: string; port?: number } {
|
||||
try {
|
||||
const envPath = envPathForProfile(profile)
|
||||
if (!existsSync(envPath)) return {}
|
||||
@@ -761,6 +764,7 @@ function getSSHEnvVars(profile?: string): { host?: string; user?: string; key?:
|
||||
host: vars.TERMINAL_SSH_HOST,
|
||||
user: vars.TERMINAL_SSH_USER,
|
||||
key: vars.TERMINAL_SSH_KEY,
|
||||
port: vars.TERMINAL_SSH_PORT ? parseInt(vars.TERMINAL_SSH_PORT, 10) : undefined,
|
||||
}
|
||||
} catch {
|
||||
return {}
|
||||
@@ -827,7 +831,7 @@ export async function createFileProvider(profile?: string): Promise<FileProvider
|
||||
{ code: 'backend_error' },
|
||||
)
|
||||
}
|
||||
provider = new SSHFileProvider(ssh.host, ssh.user, ssh.key, homeDir)
|
||||
provider = new SSHFileProvider(ssh.host, ssh.user, ssh.key, homeDir, ssh.port)
|
||||
break
|
||||
}
|
||||
case 'singularity': {
|
||||
|
||||
Reference in New Issue
Block a user