我最近将 OpenSSH 从 6.0 升级到 7.5。
我的代码捕获put
/get
命令响应回显并对其进行处理以进行验证。
代码:
exec 3>&1 4>&2
exec > $TempSessionLog 2>&1
set -x
cd $LocalDir
sftp -o PreferredAuthentications=hostbased,publickey -P $rport -b $batfile "$ruser"@"$ripaddress" > $TempLogFile << EndFTP
EndFTP
retval="$?"
exec 1>&3 2>&4
set +x
在 OpenSSH 6.0 中,响应被捕获TempLogFile
为
sftp> cd /user/data/errors/support/01
sftp> pwd
Remote working directory: /user/data/errors/support/01
sftp> mput "EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt"
**Uploading EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt to /user/data/errors/support/01/EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt**
sftp> bye
升级到OpenSSH 7.5后,回显停止了
sftp> cd /user/data/errors/support/01
sftp> pwd
Remote working directory: /user/data/errors/support/01
sftp> mput "EVERYTHING_GAA_20131029_113243_R9976594.txt.D20131029.T1520.txt"
sftp> bye
知道如何恢复响应回声吗?
答案1
自 OpenSSH 6.3 (犯罪),其-b
含义-q
和 the-q
确实相当:
让“sftp -q”按照标签上的说明执行操作:除了错误之外,隐藏所有内容;
case 'b':
// ...
showprogress = 0;
quiet = batchmode = 1;
if (!quiet)
printf("Uploading %s to %s\n", g.gl_pathv[i], abs_dst);
没有办法恢复该行为。
但是,如果您的脚本基本上执行单个命令,并且您使用输出检查结果,则可以不使用批处理模式。只需使用标准输入传递命令即可。