嵌套SSH单命令列目标服务器目录遇文件不存在错误求助
问题解决:嵌套SSH跳转后文件找不到的错误
错误原因
嵌套执行SSH命令时,*.arc通配符被server1的Shell提前解析展开,导致server2收到的是server1本地的具体文件名列表,而非通配符本身。server2上不存在这些文件,因此抛出"No such file or directory"错误;同时命令解析混乱,实际执行的仍是server1上的ls命令,所以输出结果和直接连server1时一致。
解决方案
方法1:使用SSH ProxyJump(推荐,OpenSSH 7.3+支持)
利用-J参数直接通过server1作为跳板连接server2,避免嵌套SSH的引号解析问题,命令直接在server2上执行:
ssh -J user@server1 user@server2 'ls -ltr /oracle/archive/server/*.arc --time-style=+"%d/%m/%Y %H:%M:%S" | awk '\''{gsub("/u01/archive/servidor/servidor_1_","");gsub("_123456789.arc","");print $8" - "$6" "$7}'\'' | sort -n | tail -5'
方法2:修复嵌套SSH的引号转义
如果必须使用嵌套SSH,需要给内层命令添加额外的引号转义,确保server1完整传递命令给server2,不提前解析通配符:
ssh user@server1 'ssh user@server2 '\''ls -ltr /oracle/archive/server/*.arc --time-style=+"%d/%m/%Y %H:%M:%S" | awk '\'''\'''\''{gsub("/u01/archive/servidor/servidor_1_","");gsub("_123456789.arc","");print $8" - "$6" "$7}'\'''\'''\'' | sort -n | tail -5'\'''
额外检查点
确认server2上的.arc文件路径前缀是否和awk命令中替换的/u01/archive/servidor/servidor_1_一致,如果server2上的文件路径不同,需要修改awk中的匹配字符串,确保能正确提取文件编号。
内容的提问来源于stack exchange,提问作者Diego Perotta
相关产品推荐
相关产品推荐

