远程SSH执行脚本后无法退出问题求助
解决SSH执行远程命令后会话卡住无法自动退出的问题
针对你在Mac M1上使用sshpass+ssh执行远程命令后会话卡住的问题,可通过以下几种方式解决:
方案1:移除多余的bash -s参数
ssh默认会在远程主机启动登录shell,直接将here-doc内容传递给该shell执行即可,无需额外指定bash -s。执行完毕后远程shell会自动退出:
/usr/local/bin/sshpass -p mypass ssh -T myid@xyz.com << 'EOSSH' checkfunctioncall(){ cd "/u01/9999" mkdir "remotecalltest" } checkfunctioncall EOSSH
方案2:强制远程bash跳过交互式配置加载
如果远程主机的~/.bashrc、~/.bash_profile等配置文件中存在交互式命令(如read、交互式提示符),会导致非交互式会话卡住。可指定bash以非交互式模式运行,跳过配置加载:
/usr/local/bin/sshpass -p mypass ssh -T myid@xyz.com 'bash --noprofile --norc -s' << 'EOSSH' checkfunctioncall(){ cd "/u01/9999" mkdir "remotecalltest" } checkfunctioncall EOSSH
方案3:确保远程命令明确结束stdin输入
若必须保留bash -s,可在命令末尾添加exit,同时确保here-doc的结束符无额外空格或缩进(必须顶格写):
/usr/local/bin/sshpass -p mypass ssh -T myid@xyz.com 'bash -s' << 'EOSSH' checkfunctioncall(){ cd "/u01/9999" mkdir "remotecalltest" } checkfunctioncall exit EOSSH
核心原因
会话卡住通常是因为远程shell/bash执行完你的命令后,仍在等待标准输入,或者加载了包含交互式操作的配置文件,导致无法自动终止会话。上述方案通过简化命令调用、跳过干扰性配置、明确结束会话三种方式解决该问题。
内容的提问来源于stack exchange,提问作者user23442627
相关产品推荐
相关产品推荐

