如何在.ssh/config中配置等效带执行命令的ssh连接以访问HPC集群
错误原因
你误用了ProxyCommand配置项:该配置的作用是指定承载SSH协议流量的代理通道,需要两端走标准的SSH报文交互。你直接在其中执行bsub启动终端shell,会把shell的明文输出直接传给本地SSH客户端做协议解析,自然会触发Bad packet length报错。
可行解决方案
方案1(推荐,适配VSCode场景)
OpenSSH 7.6及以上版本原生支持RemoteCommand配置项,专门用于指定SSH连接建立后自动执行的远程命令,直接把你的SSH配置替换为以下内容即可:
Host blow-node Hostname blow-login RequestTTY force RemoteCommand bsub -Ip zsh
以上配置完全等价于你原来的ssh -tt blow-login "bsub -Ip zsh"命令效果,本地终端直接执行ssh blow-node就能直接进入申请到的计算节点交互式终端。
针对VSCode Remote SSH的适配只需要额外修改一处配置:打开VSCode设置,搜索remote.SSH.enableRemoteCommand,勾选该选项启用对RemoteCommand的支持即可,后续VSCode连接blow-node时会自动进入计算节点完成服务端部署。
方案2(兼容低版本OpenSSH)
如果你的本地SSH版本低于7.6不支持RemoteCommand,可以直接在登录节点的用户启动脚本中加自动执行逻辑:
- 登录
blow-login节点,编辑你的用户shell配置文件(比如~/.bashrc或~/.zshrc),在末尾添加以下内容:
# 非交互式会话跳过资源申请 if [ -z "$PS1" ]; then return fi # 检测是否已经在计算节点,避免重复申请 if [ -z "$LSB_JOBID" ]; then exec bsub -Ip zsh fi
- 本地SSH配置简化为普通的登录节点配置即可:
Host blow-node Hostname blow-login RequestTTY force
该方案下不管是本地SSH直连还是VSCode连接,都会自动在登录节点申请资源后进入计算节点,不需要额外修改本地命令。
内容的提问来源于stack exchange,提问作者Craig Russell
相关产品推荐
相关产品推荐

