反复进行ssh握手时,pscp(putty)有时会挂起

时间:2018-08-20 07:42:37

标签: linux windows ssh putty pscp

我用腻子工具pscp遇到问题。

我检查Linux VM(Red Hat Enterprise Linux Server 7.4)“ TARGET”是否仍在运行,并将时间戳记存储在TARGET中的文件中。我从Windows VM(Windows Server 2016)“ SOURCE”完成所有这十个任务。通过以下代码使用Java启动该过程:

// get a Process executing the instruction with cmd and 
terminate the process after 5s.
String instruction = "pscp.exe  -batch -i  C:\\User\\Me 
\\keys \\privatekey_Me.ppk -sshlog >C:\\User\\Me 
\\putty.log -scp TARGET:~/dir/file.txt file.txt"
Process p = Runtime.getRuntime().exec(instruction,null,dir);
if(!p.waitFor(3, TimeUnit.MINUTES)) { //I want this to be 
5s instead of 3m, but for the question on >stackoverflow 
3m is clearer.
    p.destroy();
    throw new Exception("Connection took too long.");
  }

通常可以。

但是它在2m-10m之后也始终会失败(绝对最大20m –一个极端的异常值,中值为4m)。对于5s-2m的pscp挂起,而不是崩溃,挂起,最终它恢复并继续进行,就像什么都没发生。通过手动启动pscp.exe也可以观察到此行为-批处理脚本和手动连接都将同时成功。

为清楚起见:

>10:00:00 start, connection & copy success
>10:00:10 start, connection & copy success
>10:00:20 start, hanging
>10:00:30 hanging
>…
>10:01:30 connection & copy success
>10:01:40 start, connection & copy success

在此暂停期间,我对两个方向(目标来源,来源目标)执行了ping操作,往返时间没有明显变化。

这里有两个日志文件,第一个来自成功的手动连接(我到达需要提供密码的地方终止了它)和一个用于挂起连接的日志(在恢复连接之前提取)。

成功

  

事件日志:将新的会话日志(SSH数据包模式)写入文件:C:\ Users \ Me \ putty.log   事件日志:查找主机“ TARGET”   事件日志:连接到XXX.XXX.XXX.XXX端口YYYY   事件日志:我们声明版本:SSH-2.0-PuTTY_Release_0.64   事件日志:服务器版本:SSH-2.0-OpenSSH_7.4   事件日志:使用SSH协议版本2   传出封包#0x0,类型20 / 0x14(SSH2_MSG_KEXINIT)   传入数据包#0x0,类型20 / 0x14(SSH2_MSG_KEXINIT)   事件日志:将Diffie-Hellman与标准组“ group14”一起使用   事件日志:使用哈希SHA-1进行Diffie-Hellman密钥交换   传出封包#0x1,类型30 / 0x1e(SSH2_MSG_KEXDH_INIT)   传入数据包#0x1,类型31 / 0x1f(SSH2_MSG_KEXDH_REPLY)   事件日志:主机密钥指纹为:   事件日志:ssh-rsa 2048 XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX   传出封包#0x2,类型21 / 0x15(SSH2_MSG_NEWKEYS)   事件日志:初始化的AES-256 SDCTR客户端->服务器加密   事件日志:初始化的HMAC-SHA-256客户端->服务器MAC算法   传入数据包#0x2,类型21 / 0x15(SSH2_MSG_NEWKEYS)   事件日志:初始化的AES-256 SDCTR服务器->客户端加密   事件日志:初始化的HMAC-SHA-256服务器->客户端MAC算法   传出封包#0x3,类型5 / 0x05(SSH2_MSG_SERVICE_REQUEST)   传入数据包#0x3,类型6 / 0x06(SSH2_MSG_SERVICE_ACCEPT)   传出封包#0x4,类型50 / 0x32(SSH2_MSG_USERAUTH_REQUEST)   传入数据包#0x4,类型51 / 0x33(SSH2_MSG_USERAUTH_FAILURE)   事件日志:使用来自SECUR32.DLL的SSPI   事件日志:尝试GSSAPI身份验证   传出封包#0x5,类型50 / 0x32(SSH2_MSG_USERAUTH_REQUEST)   传入数据包#0x5,键入60 / 0x3c(SSH2_MSG_USERAUTH_GSSAPI_RESPONSE)   事件日志:GSSAPI身份验证初始化失败   事件日志:无法识别目标。   传出封包#0x6,类型50 / 0x32(SSH2_MSG_USERAUTH_REQUEST)   事件日志:尝试进行键盘交互式身份验证   传入数据包#0x6,键入60 / 0x3c(SSH2_MSG_USERAUTH_INFO_REQUEST)

失败

  

事件日志:将新的会话日志(SSH数据包模式)写入文件:C:\ Users \ Me \ putty.log   事件日志:查找主机“ TARGET”   事件日志:连接到XXX.XXX.XXX.XXX端口YYYY   事件日志:我们声明版本:SSH-2.0-PuTTY_Release_0.64   事件日志:服务器版本:SSH-2.0-OpenSSH_7.4   事件日志:使用SSH协议版本2   传出封包#0x0,类型20 / 0x14(SSH2_MSG_KEXINIT)   传入数据包#0x0,类型20 / 0x14(SSH2_MSG_KEXINIT)   事件日志:将Diffie-Hellman与标准组“ group14”一起使用   事件日志:使用哈希SHA-1进行Diffie-Hellman密钥交换   传出封包#0x1,类型30 / 0x1e(SSH2_MSG_KEXDH_INIT)   传入数据包#0x1,类型31 / 0x1f(SSH2_MSG_KEXDH_REPLY)   事件日志:主机密钥指纹为:   事件日志:ssh-rsa 2048 XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX:XX   传出封包#0x2,类型21 / 0x15(SSH2_MSG_NEWKEYS)   事件日志:初始化的AES-256 SDCTR客户端->服务器加密   事件日志:初始化的HMAC-SHA-256客户端->服务器MAC算法   传入数据包#0x2,类型21 / 0x15(SSH2_MSG_NEWKEYS)   事件日志:初始化的AES-256 SDCTR服务器->客户端加密   事件日志:初始化的HMAC-SHA-256服务器->客户端MAC算法   传出封包#0x3,类型5 / 0x05(SSH2_MSG_SERVICE_REQUEST)   传入数据包#0x3,类型6 / 0x06(SSH2_MSG_SERVICE_ACCEPT)   传出封包#0x4,类型50 / 0x32(SSH2_MSG_USERAUTH_REQUEST)   传入数据包#0x4,类型51 / 0x33(SSH2_MSG_USERAUTH_FAILURE)   事件日志:使用来自SECUR32.DLL的SSPI   事件日志:尝试GSSAPI身份验证   传出封包#0x5,类型50 / 0x32(SSH2_MSG_USERAUTH_REQUEST)   传入数据包#0x5,键入60 / 0x3c(SSH2_MSG_USERAUTH_GSSAPI_RESPONSE)   事件日志:GSSAPI身份验证初始化失败   事件日志:无法识别目标。   传出封包#0x6,类型50 / 0x32(SSH2_MSG_USERAUTH_REQUEST)   事件日志:尝试进行键盘交互式身份验证

长对数短:除了最后一行仅在成功日志中之外,两者相同:

传入数据包#0x6,键入60 / 0x3c(SSH2_MSG_USERAUTH_INFO_REQUEST)

看来这个数据包导致了问题。也许有时候会迷路吗? (但是在2m-10m之后应该不是那么稳定,对吧?) 我希望任何人都可以帮助我解决这个问题,因为我对继续调试的过程不甚了解。

出于安全原因,我可能不会使用“只是任何库”。 Nativ功能和完善的程序是我的主要选择。

0 个答案:

没有答案