Phpseclib "Invalid HMAC" Windows,适用于 LAMP/MAMP
Phpseclib "Invalid HMAC" on Windows, Works on LAMP/MAMP
尝试使用 phpseclib 在 PHP 中进行简单的 SFTP 文件传输。这是代码:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
include_once ('Net/SFTP.php');
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);
$sftp = new Net_SFTP("foo.example.com");
if (!$sftp->login("username", "password")) {
echo($sftp->getLog());
exit('Login Failed');
}
echo($sftp->getLog());
$sftp->get("remotefile.txt", "localfile.txt");
?>
除了在需要的 Windows/Apache 机器上,它在任何地方都能完美运行。在 Windows 上,它在传入的 NET_SSH2_MSG_SERVICE_REQUEST
处死亡。没有返回错误,但登录失败。每个人都是 运行 Apache 2.2 和 PHP 5.3。
这是日志:
<br />
<b>Notice</b>: Invalid HMAC in <b>[...]Net\SSH2.php</b> on line <b>3037</b><br />
<br />
<b>Notice</b>: Connection closed by server in <b>[...]Net\SSH2.php</b> on line <b>2015</b><br />
<-
00000000 53:53:48:2d:32:2e:30:2d:31:2e:38:32:20:73:73:68 SSH-2.0-1.82 ssh
00000010 6c:69:62:3a:20:73:73:68:6c:69:62:53:72:53:73:68 lib: sshlibSrSsh
00000020 53:65:72:76:65:72:20:31:2e:30:30:0d:0a Server 1.00..
->
00000000 53:53:48:2d:32:2e:30:2d:70:68:70:73:65:63:6c:69 SSH-2.0-phpsecli
00000010 62:5f:30:2e:33:20:28:6f:70:65:6e:73:73:6c:2c:20 b_0.3 (openssl,
00000020 62:63:6d:61:74:68:29:0d:0a bcmath)..
<- NET_SSH2_MSG_KEXINIT (since last: 1.545, network: 0.084s)
00000000 de:e7:02:d1:3c:35:5e:4d:71:88:af:d3:2b:66:fe:c4 .....5^Mq...+f..
00000010 00:00:00:59:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...Ydiffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:34:2d:73:68:61:31:2c an-group14-sha1,
00000030 64:69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67 diffie-hellman-g
00000040 72:6f:75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68 roup-exchange-sh
00000050 61:31:2c:64:69:66:66:69:65:2d:68:65:6c:6c:6d:61 a1,diffie-hellma
00000060 6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:00:00:00 n-group1-sha1...
00000070 07:73:73:68:2d:72:73:61:00:00:00:69:61:65:73:32 .ssh-rsa...iaes2
00000080 35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:32:35 56-cbc,twofish25
00000090 36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d:63:62 6-cbc,twofish-cb
000000a0 63:2c:61:65:73:31:32:38:2d:63:62:63:2c:74:77:6f c,aes128-cbc,two
000000b0 66:69:73:68:31:32:38:2d:63:62:63:2c:62:6c:6f:77 fish128-cbc,blow
000000c0 66:69:73:68:2d:63:62:63:2c:33:64:65:73:2d:63:62 fish-cbc,3des-cb
000000d0 63:2c:61:72:63:66:6f:75:72:2c:63:61:73:74:31:32 c,arcfour,cast12
000000e0 38:2d:63:62:63:00:00:00:69:61:65:73:32:35:36:2d 8-cbc...iaes256-
000000f0 63:62:63:2c:74:77:6f:66:69:73:68:32:35:36:2d:63 cbc,twofish256-c
00000100 62:63:2c:74:77:6f:66:69:73:68:2d:63:62:63:2c:61 bc,twofish-cbc,a
00000110 65:73:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 es128-cbc,twofis
00000120 68:31:32:38:2d:63:62:63:2c:62:6c:6f:77:66:69:73 h128-cbc,blowfis
00000130 68:2d:63:62:63:2c:33:64:65:73:2d:63:62:63:2c:61 h-cbc,3des-cbc,a
00000140 72:63:66:6f:75:72:2c:63:61:73:74:31:32:38:2d:63 rcfour,cast128-c
00000150 62:63:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c bc...+hmac-sha1,
00000160 68:6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68 hmac-md5,hmac-sh
00000170 61:31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39 a1-96,hmac-md5-9
00000180 36:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c:68 6...+hmac-sha1,h
00000190 6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68:61 mac-md5,hmac-sha
000001a0 31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 1-96,hmac-md5-96
000001b0 00:00:00:09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00 ....zlib,none...
000001c0 09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00:00:00:00 .zlib,none......
000001d0 00:00:00:00:00:00:00 .......
-> NET_SSH2_MSG_KEXINIT (since last: 0.001, network: 0s)
00000000 80:76:aa:0f:87:22:c1:df:73:35:eb:39:41:b2:c1:0c .v..."..s5.9A...
00000010 00:00:00:7e:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...~diffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:2c:64 an-group1-sha1,d
00000030 69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72 iffie-hellman-gr
00000040 6f:75:70:31:34:2d:73:68:61:31:2c:64:69:66:66:69 oup14-sha1,diffi
00000050 65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f:75:70:2d e-hellman-group-
00000060 65:78:63:68:61:6e:67:65:2d:73:68:61:31:2c:64:69 exchange-sha1,di
00000070 66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f ffie-hellman-gro
00000080 75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68:61:32 up-exchange-sha2
00000090 35:36:00:00:00:0f:73:73:68:2d:72:73:61:2c:73:73 56....ssh-rsa,ss
000000a0 68:2d:64:73:73:00:00:00:e9:61:72:63:66:6f:75:72 h-dss....arcfour
000000b0 32:35:36:2c:61:72:63:66:6f:75:72:31:32:38:2c:61 256,arcfour128,a
000000c0 65:73:31:32:38:2d:63:74:72:2c:61:65:73:31:39:32 es128-ctr,aes192
000000d0 2d:63:74:72:2c:61:65:73:32:35:36:2d:63:74:72:2c -ctr,aes256-ctr,
000000e0 74:77:6f:66:69:73:68:31:32:38:2d:63:74:72:2c:74 twofish128-ctr,t
000000f0 77:6f:66:69:73:68:31:39:32:2d:63:74:72:2c:74:77 wofish192-ctr,tw
00000100 6f:66:69:73:68:32:35:36:2d:63:74:72:2c:61:65:73 ofish256-ctr,aes
00000110 31:32:38:2d:63:62:63:2c:61:65:73:31:39:32:2d:63 128-cbc,aes192-c
00000120 62:63:2c:61:65:73:32:35:36:2d:63:62:63:2c:74:77 bc,aes256-cbc,tw
00000130 6f:66:69:73:68:31:32:38:2d:63:62:63:2c:74:77:6f ofish128-cbc,two
00000140 66:69:73:68:31:39:32:2d:63:62:63:2c:74:77:6f:66 fish192-cbc,twof
00000150 69:73:68:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 ish256-cbc,twofi
00000160 73:68:2d:63:62:63:2c:62:6c:6f:77:66:69:73:68:2d sh-cbc,blowfish-
00000170 63:74:72:2c:62:6c:6f:77:66:69:73:68:2d:63:62:63 ctr,blowfish-cbc
00000180 2c:33:64:65:73:2d:63:74:72:2c:33:64:65:73:2d:63 ,3des-ctr,3des-c
00000190 62:63:00:00:00:e9:61:72:63:66:6f:75:72:32:35:36 bc....arcfour256
000001a0 2c:61:72:63:66:6f:75:72:31:32:38:2c:61:65:73:31 ,arcfour128,aes1
000001b0 32:38:2d:63:74:72:2c:61:65:73:31:39:32:2d:63:74 28-ctr,aes192-ct
000001c0 72:2c:61:65:73:32:35:36:2d:63:74:72:2c:74:77:6f r,aes256-ctr,two
000001d0 66:69:73:68:31:32:38:2d:63:74:72:2c:74:77:6f:66 fish128-ctr,twof
000001e0 69:73:68:31:39:32:2d:63:74:72:2c:74:77:6f:66:69 ish192-ctr,twofi
000001f0 73:68:32:35:36:2d:63:74:72:2c:61:65:73:31:32:38 sh256-ctr,aes128
00000200 2d:63:62:63:2c:61:65:73:31:39:32:2d:63:62:63:2c -cbc,aes192-cbc,
00000210 61:65:73:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 aes256-cbc,twofi
00000220 73:68:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 sh128-cbc,twofis
00000230 68:31:39:32:2d:63:62:63:2c:74:77:6f:66:69:73:68 h192-cbc,twofish
00000240 32:35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d 256-cbc,twofish-
00000250 63:62:63:2c:62:6c:6f:77:66:69:73:68:2d:63:74:72 cbc,blowfish-ctr
00000260 2c:62:6c:6f:77:66:69:73:68:2d:63:62:63:2c:33:64 ,blowfish-cbc,3d
00000270 65:73:2d:63:74:72:2c:33:64:65:73:2d:63:62:63:00 es-ctr,3des-cbc.
00000280 00:00:39:68:6d:61:63:2d:73:68:61:32:2d:32:35:36 ..9hmac-sha2-256
00000290 2c:68:6d:61:63:2d:73:68:61:31:2d:39:36:2c:68:6d ,hmac-sha1-96,hm
000002a0 61:63:2d:73:68:61:31:2c:68:6d:61:63:2d:6d:64:35 ac-sha1,hmac-md5
000002b0 2d:39:36:2c:68:6d:61:63:2d:6d:64:35:00:00:00:39 -96,hmac-md5...9
000002c0 68:6d:61:63:2d:73:68:61:32:2d:32:35:36:2c:68:6d hmac-sha2-256,hm
000002d0 61:63:2d:73:68:61:31:2d:39:36:2c:68:6d:61:63:2d ac-sha1-96,hmac-
000002e0 73:68:61:31:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 sha1,hmac-md5-96
000002f0 2c:68:6d:61:63:2d:6d:64:35:00:00:00:04:6e:6f:6e ,hmac-md5....non
00000300 65:00:00:00:04:6e:6f:6e:65:00:00:00:00:00:00:00 e....none.......
00000310 00:00:00:00:00:00 ......
-> NET_SSH2_MSG_KEXDH_INIT (since last: 0.012, network: 0s)
00000000 00:00:00:80:69:2e:eb:cd:aa:4f:eb:b2:0f:ab:3a:5c ....i....O....:\
00000010 ad:43:bb:51:7e:7e:c1:90:58:13:98:aa:3d:e3:d2:7b .C.Q~~..X...=..{
00000020 b7:2b:ab:b0:ec:18:9a:d1:87:c0:99:26:82:ef:8e:a3 .+.........&....
00000030 18:81:69:91:2a:8f:ed:73:4a:29:c0:2e:85:b2:50:d2 ..i.*..sJ)....P.
00000040 f8:8b:6f:a7:60:8e:d4:7b:97:e9:da:a3:80:9d:93:7a ..o.`..{.......z
00000050 30:a5:aa:31:bc:83:33:f4:2d:8c:18:c6:4d:bc:58:f4 0..1..3.-...M.X.
00000060 5f:0c:03:57:b6:8d:72:cd:a0:cd:1a:56:55:fd:82:d6 _..W..r....VU...
00000070 5f:21:e8:77:34:65:79:eb:87:03:80:a9:c4:04:a2:6d _!.w4ey........m
00000080 a1:b6:e8:11 ....
<- NET_SSH2_MSG_KEXDH_REPLY (since last: 0.09, network: 0.09s)
00000000 00:00:00:95:00:00:00:07:73:73:68:2d:72:73:61:00 ........ssh-rsa.
00000010 00:00:01:11:00:00:00:81:00:bc:a7:d7:98:5f:d5:ce ............._..
00000020 a4:15:2f:84:52:bf:2e:70:19:e7:85:08:24:21:e9:02 ../.R..p....$!..
00000030 29:3e:a6:6e:f8:c4:f8:6d:6f:db:a6:06:53:20:e2:02 )>.n...mo...S ..
00000040 4d:db:75:16:a3:66:1d:4f:da:1d:63:d0:46:45:b8:f4 M.u..f.O..c.FE..
00000050 5a:37:bd:e4:c1:25:6c:42:3c:44:c2:8b:47:37:3d:27 Z7...%lB.D..G7='
00000060 1a:f0:45:1e:83:fb:5c:c7:b9:36:35:5b:0d:f1:70:b5 ..E...\..65[..p.
00000070 c0:0d:18:c6:39:e9:5a:29:61:8f:3e:47:5e:f1:c8:35 ....9.Z)a.>G^..5
00000080 18:09:c9:ab:08:f3:a6:35:f2:61:3e:93:d4:f8:65:0f .......5.a>...e.
00000090 8e:83:04:28:e8:fa:f5:95:53:00:00:00:80:51:79:eb ...(....S....Qy.
000000a0 65:26:79:1d:6c:d5:ac:09:09:81:32:1b:c9:99:d4:89 e&y.l.....2.....
000000b0 9a:59:92:63:d5:5e:e9:d2:d7:fa:ef:a1:7c:33:20:0c .Y.c.^......|3 .
000000c0 89:0f:09:67:1f:0f:0f:2a:47:39:d7:e5:67:a5:e4:eb ...g...*G9..g...
000000d0 12:e0:b9:6e:0f:e4:17:56:bc:ba:49:ef:f3:a1:ba:cc ...n...V..I.....
000000e0 a3:2c:57:26:46:c9:62:0e:8c:ca:87:e5:65:10:86:e0 .,W&F.b.....e...
000000f0 fd:80:be:ce:18:a0:d3:3b:33:73:b0:07:0f:de:de:72 .......;3s.....r
00000100 33:0b:30:62:d5:b3:c8:89:b2:dd:01:0b:d8:d9:53:92 3.0b..........S.
00000110 17:3f:e2:02:6d:15:ce:1b:ab:c7:4f:8d:44:00:00:00 .?..m.....O.D...
00000120 8f:00:00:00:07:73:73:68:2d:72:73:61:00:00:00:80 .....ssh-rsa....
00000130 4f:fb:0e:44:b3:1a:b0:9c:68:6e:e4:db:39:d1:a2:bd O..D....hn..9...
00000140 c0:54:ef:7e:50:ef:60:98:33:d4:cd:e3:b1:92:6f:6d .T.~P.`.3.....om
00000150 39:64:78:86:01:f0:ba:20:e9:ae:a6:78:b4:d4:d4:a1 9dx.... ...x....
00000160 e6:96:7a:a6:1e:9e:04:60:04:9c:97:81:0b:a4:56:63 ..z....`......Vc
00000170 16:b4:d8:77:d0:4b:c6:d1:6c:f1:7b:df:65:8f:5d:e1 ...w.K..l.{.e.].
00000180 9e:af:6d:c1:a8:57:d6:42:7d:38:3f:96:3f:4c:3c:78 ..m..W.B}8?.?L.x
00000190 a0:fb:be:7e:51:1f:b7:b0:e6:35:79:31:46:d4:dd:42 ...~Q....5y1F..B
000001a0 c6:aa:fa:7f:09:0c:10:a5:cf:26:5f:16:0c:dd:8f:46 .........&_....F
-> NET_SSH2_MSG_NEWKEYS (since last: 0.011, network: 0s)
<- NET_SSH2_MSG_NEWKEYS (since last: 0.001, network: 0s)
-> NET_SSH2_MSG_SERVICE_REQUEST (since last: 0.003, network: 0s)
00000000 00:00:00:0c:73:73:68:2d:75:73:65:72:61:75:74:68 ....ssh-userauth
Login Failed
为了比较,这是在不同服务器上成功登录的日志:
<-
00000000 53:53:48:2d:32:2e:30:2d:31:2e:38:32:20:73:73:68 SSH-2.0-1.82 ssh
00000010 6c:69:62:3a:20:73:73:68:6c:69:62:53:72:53:73:68 lib: sshlibSrSsh
00000020 53:65:72:76:65:72:20:31:2e:30:30:0d:0a Server 1.00..
->
00000000 53:53:48:2d:32:2e:30:2d:70:68:70:73:65:63:6c:69 SSH-2.0-phpsecli
00000010 62:5f:30:2e:33:20:28:6f:70:65:6e:73:73:6c:2c:20 b_0.3 (openssl,
00000020 62:63:6d:61:74:68:29:0d:0a bcmath)..
<- NET_SSH2_MSG_KEXINIT (since last: 1.0692, network: 0.0864s)
00000000 18:37:a9:f6:4e:9e:59:ee:e2:dc:9d:f3:0d:20:03:d3 .7..N.Y...... ..
00000010 00:00:00:59:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...Ydiffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:34:2d:73:68:61:31:2c an-group14-sha1,
00000030 64:69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67 diffie-hellman-g
00000040 72:6f:75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68 roup-exchange-sh
00000050 61:31:2c:64:69:66:66:69:65:2d:68:65:6c:6c:6d:61 a1,diffie-hellma
00000060 6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:00:00:00 n-group1-sha1...
00000070 07:73:73:68:2d:72:73:61:00:00:00:69:61:65:73:32 .ssh-rsa...iaes2
00000080 35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:32:35 56-cbc,twofish25
00000090 36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d:63:62 6-cbc,twofish-cb
000000a0 63:2c:61:65:73:31:32:38:2d:63:62:63:2c:74:77:6f c,aes128-cbc,two
000000b0 66:69:73:68:31:32:38:2d:63:62:63:2c:62:6c:6f:77 fish128-cbc,blow
000000c0 66:69:73:68:2d:63:62:63:2c:33:64:65:73:2d:63:62 fish-cbc,3des-cb
000000d0 63:2c:61:72:63:66:6f:75:72:2c:63:61:73:74:31:32 c,arcfour,cast12
000000e0 38:2d:63:62:63:00:00:00:69:61:65:73:32:35:36:2d 8-cbc...iaes256-
000000f0 63:62:63:2c:74:77:6f:66:69:73:68:32:35:36:2d:63 cbc,twofish256-c
00000100 62:63:2c:74:77:6f:66:69:73:68:2d:63:62:63:2c:61 bc,twofish-cbc,a
00000110 65:73:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 es128-cbc,twofis
00000120 68:31:32:38:2d:63:62:63:2c:62:6c:6f:77:66:69:73 h128-cbc,blowfis
00000130 68:2d:63:62:63:2c:33:64:65:73:2d:63:62:63:2c:61 h-cbc,3des-cbc,a
00000140 72:63:66:6f:75:72:2c:63:61:73:74:31:32:38:2d:63 rcfour,cast128-c
00000150 62:63:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c bc...+hmac-sha1,
00000160 68:6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68 hmac-md5,hmac-sh
00000170 61:31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39 a1-96,hmac-md5-9
00000180 36:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c:68 6...+hmac-sha1,h
00000190 6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68:61 mac-md5,hmac-sha
000001a0 31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 1-96,hmac-md5-96
000001b0 00:00:00:09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00 ....zlib,none...
000001c0 09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00:00:00:00 .zlib,none......
000001d0 00:00:00:00:00:00:00 .......
-> NET_SSH2_MSG_KEXINIT (since last: 0.0009, network: 0s)
00000000 ba:0c:4e:f7:26:8e:51:80:3f:0a:10:78:b3:ba:ca:f4 ..N.&.Q.?..x....
00000010 00:00:00:7e:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...~diffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:2c:64 an-group1-sha1,d
00000030 69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72 iffie-hellman-gr
00000040 6f:75:70:31:34:2d:73:68:61:31:2c:64:69:66:66:69 oup14-sha1,diffi
00000050 65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f:75:70:2d e-hellman-group-
00000060 65:78:63:68:61:6e:67:65:2d:73:68:61:31:2c:64:69 exchange-sha1,di
00000070 66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f ffie-hellman-gro
00000080 75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68:61:32 up-exchange-sha2
00000090 35:36:00:00:00:0f:73:73:68:2d:72:73:61:2c:73:73 56....ssh-rsa,ss
000000a0 68:2d:64:73:73:00:00:00:e9:61:72:63:66:6f:75:72 h-dss....arcfour
000000b0 32:35:36:2c:61:72:63:66:6f:75:72:31:32:38:2c:61 256,arcfour128,a
000000c0 65:73:31:32:38:2d:63:74:72:2c:61:65:73:31:39:32 es128-ctr,aes192
000000d0 2d:63:74:72:2c:61:65:73:32:35:36:2d:63:74:72:2c -ctr,aes256-ctr,
000000e0 74:77:6f:66:69:73:68:31:32:38:2d:63:74:72:2c:74 twofish128-ctr,t
000000f0 77:6f:66:69:73:68:31:39:32:2d:63:74:72:2c:74:77 wofish192-ctr,tw
00000100 6f:66:69:73:68:32:35:36:2d:63:74:72:2c:61:65:73 ofish256-ctr,aes
00000110 31:32:38:2d:63:62:63:2c:61:65:73:31:39:32:2d:63 128-cbc,aes192-c
00000120 62:63:2c:61:65:73:32:35:36:2d:63:62:63:2c:74:77 bc,aes256-cbc,tw
00000130 6f:66:69:73:68:31:32:38:2d:63:62:63:2c:74:77:6f ofish128-cbc,two
00000140 66:69:73:68:31:39:32:2d:63:62:63:2c:74:77:6f:66 fish192-cbc,twof
00000150 69:73:68:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 ish256-cbc,twofi
00000160 73:68:2d:63:62:63:2c:62:6c:6f:77:66:69:73:68:2d sh-cbc,blowfish-
00000170 63:74:72:2c:62:6c:6f:77:66:69:73:68:2d:63:62:63 ctr,blowfish-cbc
00000180 2c:33:64:65:73:2d:63:74:72:2c:33:64:65:73:2d:63 ,3des-ctr,3des-c
00000190 62:63:00:00:00:e9:61:72:63:66:6f:75:72:32:35:36 bc....arcfour256
000001a0 2c:61:72:63:66:6f:75:72:31:32:38:2c:61:65:73:31 ,arcfour128,aes1
000001b0 32:38:2d:63:74:72:2c:61:65:73:31:39:32:2d:63:74 28-ctr,aes192-ct
000001c0 72:2c:61:65:73:32:35:36:2d:63:74:72:2c:74:77:6f r,aes256-ctr,two
000001d0 66:69:73:68:31:32:38:2d:63:74:72:2c:74:77:6f:66 fish128-ctr,twof
000001e0 69:73:68:31:39:32:2d:63:74:72:2c:74:77:6f:66:69 ish192-ctr,twofi
000001f0 73:68:32:35:36:2d:63:74:72:2c:61:65:73:31:32:38 sh256-ctr,aes128
00000200 2d:63:62:63:2c:61:65:73:31:39:32:2d:63:62:63:2c -cbc,aes192-cbc,
00000210 61:65:73:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 aes256-cbc,twofi
00000220 73:68:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 sh128-cbc,twofis
00000230 68:31:39:32:2d:63:62:63:2c:74:77:6f:66:69:73:68 h192-cbc,twofish
00000240 32:35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d 256-cbc,twofish-
00000250 63:62:63:2c:62:6c:6f:77:66:69:73:68:2d:63:74:72 cbc,blowfish-ctr
00000260 2c:62:6c:6f:77:66:69:73:68:2d:63:62:63:2c:33:64 ,blowfish-cbc,3d
00000270 65:73:2d:63:74:72:2c:33:64:65:73:2d:63:62:63:00 es-ctr,3des-cbc.
00000280 00:00:39:68:6d:61:63:2d:73:68:61:32:2d:32:35:36 ..9hmac-sha2-256
00000290 2c:68:6d:61:63:2d:73:68:61:31:2d:39:36:2c:68:6d ,hmac-sha1-96,hm
000002a0 61:63:2d:73:68:61:31:2c:68:6d:61:63:2d:6d:64:35 ac-sha1,hmac-md5
000002b0 2d:39:36:2c:68:6d:61:63:2d:6d:64:35:00:00:00:39 -96,hmac-md5...9
000002c0 68:6d:61:63:2d:73:68:61:32:2d:32:35:36:2c:68:6d hmac-sha2-256,hm
000002d0 61:63:2d:73:68:61:31:2d:39:36:2c:68:6d:61:63:2d ac-sha1-96,hmac-
000002e0 73:68:61:31:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 sha1,hmac-md5-96
000002f0 2c:68:6d:61:63:2d:6d:64:35:00:00:00:04:6e:6f:6e ,hmac-md5....non
00000300 65:00:00:00:04:6e:6f:6e:65:00:00:00:00:00:00:00 e....none.......
00000310 00:00:00:00:00:00 ......
-> NET_SSH2_MSG_KEXDH_INIT (since last: 0.0151, network: 0s)
00000000 00:00:00:80:04:bc:13:ad:9c:ab:d4:d5:16:8a:2a:77 ..............*w
00000010 fd:e0:e3:95:90:cb:1e:e3:e2:f7:72:f5:db:31:d2:ca ..........r..1..
00000020 22:97:38:d4:c0:5c:3f:db:de:99:dc:a7:76:e0:94:ad ".8..\?.....v...
00000030 c7:6e:94:2d:0d:b8:ee:77:41:75:35:03:bf:9a:9f:1f .n.-...wAu5.....
00000040 ae:96:21:39:59:fc:fb:63:da:c7:50:81:80:76:34:e3 ..!9Y..c..P..v4.
00000050 5d:cf:9b:f6:a3:de:bb:c0:16:19:04:3e:81:99:24:92 ]..........>..$.
00000060 4c:d7:50:a4:6c:5f:b7:d4:cb:de:f0:d5:36:ba:4a:7b L.P.l_......6.J{
00000070 19:60:64:48:bc:06:6a:33:fc:e0:a3:fa:5a:6c:c5:0b .`dH..j3....Zl..
00000080 5b:bf:61:28 [.a(
<- NET_SSH2_MSG_KEXDH_REPLY (since last: 0.4882, network: 0.4881s)
00000000 00:00:00:95:00:00:00:07:73:73:68:2d:72:73:61:00 ........ssh-rsa.
00000010 00:00:01:11:00:00:00:81:00:bc:a7:d7:98:5f:d5:ce ............._..
00000020 a4:15:2f:84:52:bf:2e:70:19:e7:85:08:24:21:e9:02 ../.R..p....$!..
00000030 29:3e:a6:6e:f8:c4:f8:6d:6f:db:a6:06:53:20:e2:02 )>.n...mo...S ..
00000040 4d:db:75:16:a3:66:1d:4f:da:1d:63:d0:46:45:b8:f4 M.u..f.O..c.FE..
00000050 5a:37:bd:e4:c1:25:6c:42:3c:44:c2:8b:47:37:3d:27 Z7...%lB.D..G7='
00000060 1a:f0:45:1e:83:fb:5c:c7:b9:36:35:5b:0d:f1:70:b5 ..E...\..65[..p.
00000070 c0:0d:18:c6:39:e9:5a:29:61:8f:3e:47:5e:f1:c8:35 ....9.Z)a.>G^..5
00000080 18:09:c9:ab:08:f3:a6:35:f2:61:3e:93:d4:f8:65:0f .......5.a>...e.
00000090 8e:83:04:28:e8:fa:f5:95:53:00:00:00:81:00:ef:17 ...(....S.......
000000a0 88:86:6f:8f:99:f3:c9:f6:da:8a:cb:30:65:99:8b:c9 ..o........0e...
000000b0 ca:44:7b:d4:86:55:a5:a5:5d:bd:0d:c8:9e:b7:cb:89 .D{..U..].......
000000c0 fd:89:d4:53:7b:80:61:20:8a:59:3b:89:9a:7b:8b:31 ...S{.a .Y;..{.1
000000d0 9a:e7:c2:7f:ba:38:54:96:5b:92:30:cb:a0:c3:b1:2c .....8T.[.0....,
000000e0 68:b4:e7:2e:af:ba:64:73:08:ce:b4:f9:5e:e4:36:07 h.....ds....^.6.
000000f0 d4:34:2a:00:2d:1b:4c:76:c8:67:3d:3a:23:b7:29:a5 .4*.-.Lv.g=:#.).
00000100 e3:45:9a:c2:b1:ed:c9:85:cc:05:15:cb:9d:fc:9b:9e .E..............
00000110 3b:5d:e4:bc:0a:d5:8d:0f:dc:24:d8:e3:ed:0d:00:00 ;].......$......
00000120 00:8f:00:00:00:07:73:73:68:2d:72:73:61:00:00:00 ......ssh-rsa...
00000130 80:5e:a3:72:63:cd:76:8b:8c:6c:49:01:30:1b:b1:aa .^.rc.v..lI.0...
00000140 19:02:93:53:1e:d0:47:ed:8c:c5:02:2e:60:94:5b:eb ...S..G.....`.[.
00000150 60:3e:b2:63:44:bc:d7:6b:bc:4e:af:2d:d9:88:4c:3e `>.cD..k.N.-..L>
00000160 d7:97:fc:c8:2e:8b:27:15:42:bb:a2:3e:b7:8a:8c:64 ......'.B..>...d
00000170 7e:ec:8b:75:dc:64:d2:67:dd:b3:e2:76:a0:56:b9:ab ~..u.d.g...v.V..
00000180 05:3b:2b:73:e0:65:a0:a6:c3:92:e2:a3:db:46:11:eb .;+s.e.......F..
00000190 ca:40:ff:4e:1f:cd:d8:5a:b9:c4:39:f9:81:d2:40:75 .@.N...Z..9...@u
000001a0 a3:8b:e4:61:d1:bd:0a:2a:3e:b7:42:88:58:e1:04:fa ...a...*>.B.X...
000001b0 29 )
-> NET_SSH2_MSG_NEWKEYS (since last: 0.0131, network: 0s)
<- NET_SSH2_MSG_NEWKEYS (since last: 0.0001, network: 0s)
-> NET_SSH2_MSG_SERVICE_REQUEST (since last: 0.0031, network: 0s)
00000000 00:00:00:0c:73:73:68:2d:75:73:65:72:61:75:74:68 ....ssh-userauth
<- NET_SSH2_MSG_SERVICE_ACCEPT (since last: 0.7004, network: 0.7003s)
00000000 00:00:00:0c:73:73:68:2d:75:73:65:72:61:75:74:68 ....ssh-userauth
-> NET_SSH2_MSG_USERAUTH_REQUEST (since last: 0.0002, network: 0s)
00000000 00:00:00:08:75:73:65:72:6e:61:6d:65:00:00:00:0e ....username....
00000010 73:73:68:2d:63:6f:6e:6e:65:63:74:69:6f:6e:00:00 ssh-connection..
00000020 00:08:70:61:73:73:77:6f:72:64:00:00:00:00:08:70 ..password.....p
00000030 61:73:73:77:6f:72:64 assword
<- NET_SSH2_MSG_USERAUTH_SUCCESS (since last: 2.9883, network: 2.9882s)
-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0.0002, network: 0s)
00000000 00:00:00:07:73:65:73:73:69:6f:6e:00:00:01:00:7f ....session.....
00000010 ff:ff:ff:00:00:40:00 .....@.
<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.0984, network: 0.0001s)
00000000 00:00:01:00:00:00:00:00:00:00:40:00:00:00:8c:00 ..........@.....
-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0003, network: 0s)
00000000 00:00:00:00:00:00:00:09:73:75:62:73:79:73:74:65 ........subsyste
00000010 6d:01:00:00:00:04:73:66:74:70 m.....sftp
<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0.0853, network: 0.0001s)
00000000 00:00:01:00 ....
-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0s)
00000000 00:00:00:00:00:00:00:09:00:00:00:05:01:00:00:00 ................
00000010 03 .
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.089, network: 0.0889s)
00000000 00:00:01:00:00:00:00:09:00:00:00:05:02:00:00:00 ................
00000010 03 .
-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0001s)
00000000 00:00:00:00:00:00:00:0e:00:00:00:0a:10:00:00:00 ................
00000010 01:00:00:00:01:2e ......
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0901, network: 0.09s)
00000000 00:00:01:00:00:00:00:37:00:00:00:33:68:00:00:00 .......7...3h...
00000010 01:00:00:00:01:00:00:00:01:2f:00:00:00:01:2f:00 ........./..../.
00000020 00:00:0f:00:00:00:00:00:00:10:00:00:00:00:00:00 ................
00000030 00:00:00:00:00:41:c0:55:b1:54:db:55:b1:54:db .....A.U.T.U.T.
问题出在它尝试使用的其中一种算法中。在 Windows 服务器上 aes128-cbc
和 aes256-cbc
都可用时,它窒息了。将它们注释掉可以使连接无错误地完成:
在 Net/SSH2.php 在 _key_exchange()
:
//'aes128-cbc', // RECOMMENDED AES with a 128-bit key
'aes192-cbc', // OPTIONAL AES with a 192-bit key
//'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key
尝试使用 phpseclib 在 PHP 中进行简单的 SFTP 文件传输。这是代码:
<?php
ini_set('display_errors', '1');
error_reporting(E_ALL);
include_once ('Net/SFTP.php');
define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX);
$sftp = new Net_SFTP("foo.example.com");
if (!$sftp->login("username", "password")) {
echo($sftp->getLog());
exit('Login Failed');
}
echo($sftp->getLog());
$sftp->get("remotefile.txt", "localfile.txt");
?>
除了在需要的 Windows/Apache 机器上,它在任何地方都能完美运行。在 Windows 上,它在传入的 NET_SSH2_MSG_SERVICE_REQUEST
处死亡。没有返回错误,但登录失败。每个人都是 运行 Apache 2.2 和 PHP 5.3。
这是日志:
<br />
<b>Notice</b>: Invalid HMAC in <b>[...]Net\SSH2.php</b> on line <b>3037</b><br />
<br />
<b>Notice</b>: Connection closed by server in <b>[...]Net\SSH2.php</b> on line <b>2015</b><br />
<-
00000000 53:53:48:2d:32:2e:30:2d:31:2e:38:32:20:73:73:68 SSH-2.0-1.82 ssh
00000010 6c:69:62:3a:20:73:73:68:6c:69:62:53:72:53:73:68 lib: sshlibSrSsh
00000020 53:65:72:76:65:72:20:31:2e:30:30:0d:0a Server 1.00..
->
00000000 53:53:48:2d:32:2e:30:2d:70:68:70:73:65:63:6c:69 SSH-2.0-phpsecli
00000010 62:5f:30:2e:33:20:28:6f:70:65:6e:73:73:6c:2c:20 b_0.3 (openssl,
00000020 62:63:6d:61:74:68:29:0d:0a bcmath)..
<- NET_SSH2_MSG_KEXINIT (since last: 1.545, network: 0.084s)
00000000 de:e7:02:d1:3c:35:5e:4d:71:88:af:d3:2b:66:fe:c4 .....5^Mq...+f..
00000010 00:00:00:59:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...Ydiffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:34:2d:73:68:61:31:2c an-group14-sha1,
00000030 64:69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67 diffie-hellman-g
00000040 72:6f:75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68 roup-exchange-sh
00000050 61:31:2c:64:69:66:66:69:65:2d:68:65:6c:6c:6d:61 a1,diffie-hellma
00000060 6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:00:00:00 n-group1-sha1...
00000070 07:73:73:68:2d:72:73:61:00:00:00:69:61:65:73:32 .ssh-rsa...iaes2
00000080 35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:32:35 56-cbc,twofish25
00000090 36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d:63:62 6-cbc,twofish-cb
000000a0 63:2c:61:65:73:31:32:38:2d:63:62:63:2c:74:77:6f c,aes128-cbc,two
000000b0 66:69:73:68:31:32:38:2d:63:62:63:2c:62:6c:6f:77 fish128-cbc,blow
000000c0 66:69:73:68:2d:63:62:63:2c:33:64:65:73:2d:63:62 fish-cbc,3des-cb
000000d0 63:2c:61:72:63:66:6f:75:72:2c:63:61:73:74:31:32 c,arcfour,cast12
000000e0 38:2d:63:62:63:00:00:00:69:61:65:73:32:35:36:2d 8-cbc...iaes256-
000000f0 63:62:63:2c:74:77:6f:66:69:73:68:32:35:36:2d:63 cbc,twofish256-c
00000100 62:63:2c:74:77:6f:66:69:73:68:2d:63:62:63:2c:61 bc,twofish-cbc,a
00000110 65:73:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 es128-cbc,twofis
00000120 68:31:32:38:2d:63:62:63:2c:62:6c:6f:77:66:69:73 h128-cbc,blowfis
00000130 68:2d:63:62:63:2c:33:64:65:73:2d:63:62:63:2c:61 h-cbc,3des-cbc,a
00000140 72:63:66:6f:75:72:2c:63:61:73:74:31:32:38:2d:63 rcfour,cast128-c
00000150 62:63:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c bc...+hmac-sha1,
00000160 68:6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68 hmac-md5,hmac-sh
00000170 61:31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39 a1-96,hmac-md5-9
00000180 36:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c:68 6...+hmac-sha1,h
00000190 6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68:61 mac-md5,hmac-sha
000001a0 31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 1-96,hmac-md5-96
000001b0 00:00:00:09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00 ....zlib,none...
000001c0 09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00:00:00:00 .zlib,none......
000001d0 00:00:00:00:00:00:00 .......
-> NET_SSH2_MSG_KEXINIT (since last: 0.001, network: 0s)
00000000 80:76:aa:0f:87:22:c1:df:73:35:eb:39:41:b2:c1:0c .v..."..s5.9A...
00000010 00:00:00:7e:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...~diffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:2c:64 an-group1-sha1,d
00000030 69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72 iffie-hellman-gr
00000040 6f:75:70:31:34:2d:73:68:61:31:2c:64:69:66:66:69 oup14-sha1,diffi
00000050 65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f:75:70:2d e-hellman-group-
00000060 65:78:63:68:61:6e:67:65:2d:73:68:61:31:2c:64:69 exchange-sha1,di
00000070 66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f ffie-hellman-gro
00000080 75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68:61:32 up-exchange-sha2
00000090 35:36:00:00:00:0f:73:73:68:2d:72:73:61:2c:73:73 56....ssh-rsa,ss
000000a0 68:2d:64:73:73:00:00:00:e9:61:72:63:66:6f:75:72 h-dss....arcfour
000000b0 32:35:36:2c:61:72:63:66:6f:75:72:31:32:38:2c:61 256,arcfour128,a
000000c0 65:73:31:32:38:2d:63:74:72:2c:61:65:73:31:39:32 es128-ctr,aes192
000000d0 2d:63:74:72:2c:61:65:73:32:35:36:2d:63:74:72:2c -ctr,aes256-ctr,
000000e0 74:77:6f:66:69:73:68:31:32:38:2d:63:74:72:2c:74 twofish128-ctr,t
000000f0 77:6f:66:69:73:68:31:39:32:2d:63:74:72:2c:74:77 wofish192-ctr,tw
00000100 6f:66:69:73:68:32:35:36:2d:63:74:72:2c:61:65:73 ofish256-ctr,aes
00000110 31:32:38:2d:63:62:63:2c:61:65:73:31:39:32:2d:63 128-cbc,aes192-c
00000120 62:63:2c:61:65:73:32:35:36:2d:63:62:63:2c:74:77 bc,aes256-cbc,tw
00000130 6f:66:69:73:68:31:32:38:2d:63:62:63:2c:74:77:6f ofish128-cbc,two
00000140 66:69:73:68:31:39:32:2d:63:62:63:2c:74:77:6f:66 fish192-cbc,twof
00000150 69:73:68:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 ish256-cbc,twofi
00000160 73:68:2d:63:62:63:2c:62:6c:6f:77:66:69:73:68:2d sh-cbc,blowfish-
00000170 63:74:72:2c:62:6c:6f:77:66:69:73:68:2d:63:62:63 ctr,blowfish-cbc
00000180 2c:33:64:65:73:2d:63:74:72:2c:33:64:65:73:2d:63 ,3des-ctr,3des-c
00000190 62:63:00:00:00:e9:61:72:63:66:6f:75:72:32:35:36 bc....arcfour256
000001a0 2c:61:72:63:66:6f:75:72:31:32:38:2c:61:65:73:31 ,arcfour128,aes1
000001b0 32:38:2d:63:74:72:2c:61:65:73:31:39:32:2d:63:74 28-ctr,aes192-ct
000001c0 72:2c:61:65:73:32:35:36:2d:63:74:72:2c:74:77:6f r,aes256-ctr,two
000001d0 66:69:73:68:31:32:38:2d:63:74:72:2c:74:77:6f:66 fish128-ctr,twof
000001e0 69:73:68:31:39:32:2d:63:74:72:2c:74:77:6f:66:69 ish192-ctr,twofi
000001f0 73:68:32:35:36:2d:63:74:72:2c:61:65:73:31:32:38 sh256-ctr,aes128
00000200 2d:63:62:63:2c:61:65:73:31:39:32:2d:63:62:63:2c -cbc,aes192-cbc,
00000210 61:65:73:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 aes256-cbc,twofi
00000220 73:68:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 sh128-cbc,twofis
00000230 68:31:39:32:2d:63:62:63:2c:74:77:6f:66:69:73:68 h192-cbc,twofish
00000240 32:35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d 256-cbc,twofish-
00000250 63:62:63:2c:62:6c:6f:77:66:69:73:68:2d:63:74:72 cbc,blowfish-ctr
00000260 2c:62:6c:6f:77:66:69:73:68:2d:63:62:63:2c:33:64 ,blowfish-cbc,3d
00000270 65:73:2d:63:74:72:2c:33:64:65:73:2d:63:62:63:00 es-ctr,3des-cbc.
00000280 00:00:39:68:6d:61:63:2d:73:68:61:32:2d:32:35:36 ..9hmac-sha2-256
00000290 2c:68:6d:61:63:2d:73:68:61:31:2d:39:36:2c:68:6d ,hmac-sha1-96,hm
000002a0 61:63:2d:73:68:61:31:2c:68:6d:61:63:2d:6d:64:35 ac-sha1,hmac-md5
000002b0 2d:39:36:2c:68:6d:61:63:2d:6d:64:35:00:00:00:39 -96,hmac-md5...9
000002c0 68:6d:61:63:2d:73:68:61:32:2d:32:35:36:2c:68:6d hmac-sha2-256,hm
000002d0 61:63:2d:73:68:61:31:2d:39:36:2c:68:6d:61:63:2d ac-sha1-96,hmac-
000002e0 73:68:61:31:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 sha1,hmac-md5-96
000002f0 2c:68:6d:61:63:2d:6d:64:35:00:00:00:04:6e:6f:6e ,hmac-md5....non
00000300 65:00:00:00:04:6e:6f:6e:65:00:00:00:00:00:00:00 e....none.......
00000310 00:00:00:00:00:00 ......
-> NET_SSH2_MSG_KEXDH_INIT (since last: 0.012, network: 0s)
00000000 00:00:00:80:69:2e:eb:cd:aa:4f:eb:b2:0f:ab:3a:5c ....i....O....:\
00000010 ad:43:bb:51:7e:7e:c1:90:58:13:98:aa:3d:e3:d2:7b .C.Q~~..X...=..{
00000020 b7:2b:ab:b0:ec:18:9a:d1:87:c0:99:26:82:ef:8e:a3 .+.........&....
00000030 18:81:69:91:2a:8f:ed:73:4a:29:c0:2e:85:b2:50:d2 ..i.*..sJ)....P.
00000040 f8:8b:6f:a7:60:8e:d4:7b:97:e9:da:a3:80:9d:93:7a ..o.`..{.......z
00000050 30:a5:aa:31:bc:83:33:f4:2d:8c:18:c6:4d:bc:58:f4 0..1..3.-...M.X.
00000060 5f:0c:03:57:b6:8d:72:cd:a0:cd:1a:56:55:fd:82:d6 _..W..r....VU...
00000070 5f:21:e8:77:34:65:79:eb:87:03:80:a9:c4:04:a2:6d _!.w4ey........m
00000080 a1:b6:e8:11 ....
<- NET_SSH2_MSG_KEXDH_REPLY (since last: 0.09, network: 0.09s)
00000000 00:00:00:95:00:00:00:07:73:73:68:2d:72:73:61:00 ........ssh-rsa.
00000010 00:00:01:11:00:00:00:81:00:bc:a7:d7:98:5f:d5:ce ............._..
00000020 a4:15:2f:84:52:bf:2e:70:19:e7:85:08:24:21:e9:02 ../.R..p....$!..
00000030 29:3e:a6:6e:f8:c4:f8:6d:6f:db:a6:06:53:20:e2:02 )>.n...mo...S ..
00000040 4d:db:75:16:a3:66:1d:4f:da:1d:63:d0:46:45:b8:f4 M.u..f.O..c.FE..
00000050 5a:37:bd:e4:c1:25:6c:42:3c:44:c2:8b:47:37:3d:27 Z7...%lB.D..G7='
00000060 1a:f0:45:1e:83:fb:5c:c7:b9:36:35:5b:0d:f1:70:b5 ..E...\..65[..p.
00000070 c0:0d:18:c6:39:e9:5a:29:61:8f:3e:47:5e:f1:c8:35 ....9.Z)a.>G^..5
00000080 18:09:c9:ab:08:f3:a6:35:f2:61:3e:93:d4:f8:65:0f .......5.a>...e.
00000090 8e:83:04:28:e8:fa:f5:95:53:00:00:00:80:51:79:eb ...(....S....Qy.
000000a0 65:26:79:1d:6c:d5:ac:09:09:81:32:1b:c9:99:d4:89 e&y.l.....2.....
000000b0 9a:59:92:63:d5:5e:e9:d2:d7:fa:ef:a1:7c:33:20:0c .Y.c.^......|3 .
000000c0 89:0f:09:67:1f:0f:0f:2a:47:39:d7:e5:67:a5:e4:eb ...g...*G9..g...
000000d0 12:e0:b9:6e:0f:e4:17:56:bc:ba:49:ef:f3:a1:ba:cc ...n...V..I.....
000000e0 a3:2c:57:26:46:c9:62:0e:8c:ca:87:e5:65:10:86:e0 .,W&F.b.....e...
000000f0 fd:80:be:ce:18:a0:d3:3b:33:73:b0:07:0f:de:de:72 .......;3s.....r
00000100 33:0b:30:62:d5:b3:c8:89:b2:dd:01:0b:d8:d9:53:92 3.0b..........S.
00000110 17:3f:e2:02:6d:15:ce:1b:ab:c7:4f:8d:44:00:00:00 .?..m.....O.D...
00000120 8f:00:00:00:07:73:73:68:2d:72:73:61:00:00:00:80 .....ssh-rsa....
00000130 4f:fb:0e:44:b3:1a:b0:9c:68:6e:e4:db:39:d1:a2:bd O..D....hn..9...
00000140 c0:54:ef:7e:50:ef:60:98:33:d4:cd:e3:b1:92:6f:6d .T.~P.`.3.....om
00000150 39:64:78:86:01:f0:ba:20:e9:ae:a6:78:b4:d4:d4:a1 9dx.... ...x....
00000160 e6:96:7a:a6:1e:9e:04:60:04:9c:97:81:0b:a4:56:63 ..z....`......Vc
00000170 16:b4:d8:77:d0:4b:c6:d1:6c:f1:7b:df:65:8f:5d:e1 ...w.K..l.{.e.].
00000180 9e:af:6d:c1:a8:57:d6:42:7d:38:3f:96:3f:4c:3c:78 ..m..W.B}8?.?L.x
00000190 a0:fb:be:7e:51:1f:b7:b0:e6:35:79:31:46:d4:dd:42 ...~Q....5y1F..B
000001a0 c6:aa:fa:7f:09:0c:10:a5:cf:26:5f:16:0c:dd:8f:46 .........&_....F
-> NET_SSH2_MSG_NEWKEYS (since last: 0.011, network: 0s)
<- NET_SSH2_MSG_NEWKEYS (since last: 0.001, network: 0s)
-> NET_SSH2_MSG_SERVICE_REQUEST (since last: 0.003, network: 0s)
00000000 00:00:00:0c:73:73:68:2d:75:73:65:72:61:75:74:68 ....ssh-userauth
Login Failed
为了比较,这是在不同服务器上成功登录的日志:
<-
00000000 53:53:48:2d:32:2e:30:2d:31:2e:38:32:20:73:73:68 SSH-2.0-1.82 ssh
00000010 6c:69:62:3a:20:73:73:68:6c:69:62:53:72:53:73:68 lib: sshlibSrSsh
00000020 53:65:72:76:65:72:20:31:2e:30:30:0d:0a Server 1.00..
->
00000000 53:53:48:2d:32:2e:30:2d:70:68:70:73:65:63:6c:69 SSH-2.0-phpsecli
00000010 62:5f:30:2e:33:20:28:6f:70:65:6e:73:73:6c:2c:20 b_0.3 (openssl,
00000020 62:63:6d:61:74:68:29:0d:0a bcmath)..
<- NET_SSH2_MSG_KEXINIT (since last: 1.0692, network: 0.0864s)
00000000 18:37:a9:f6:4e:9e:59:ee:e2:dc:9d:f3:0d:20:03:d3 .7..N.Y...... ..
00000010 00:00:00:59:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...Ydiffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:34:2d:73:68:61:31:2c an-group14-sha1,
00000030 64:69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67 diffie-hellman-g
00000040 72:6f:75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68 roup-exchange-sh
00000050 61:31:2c:64:69:66:66:69:65:2d:68:65:6c:6c:6d:61 a1,diffie-hellma
00000060 6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:00:00:00 n-group1-sha1...
00000070 07:73:73:68:2d:72:73:61:00:00:00:69:61:65:73:32 .ssh-rsa...iaes2
00000080 35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:32:35 56-cbc,twofish25
00000090 36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d:63:62 6-cbc,twofish-cb
000000a0 63:2c:61:65:73:31:32:38:2d:63:62:63:2c:74:77:6f c,aes128-cbc,two
000000b0 66:69:73:68:31:32:38:2d:63:62:63:2c:62:6c:6f:77 fish128-cbc,blow
000000c0 66:69:73:68:2d:63:62:63:2c:33:64:65:73:2d:63:62 fish-cbc,3des-cb
000000d0 63:2c:61:72:63:66:6f:75:72:2c:63:61:73:74:31:32 c,arcfour,cast12
000000e0 38:2d:63:62:63:00:00:00:69:61:65:73:32:35:36:2d 8-cbc...iaes256-
000000f0 63:62:63:2c:74:77:6f:66:69:73:68:32:35:36:2d:63 cbc,twofish256-c
00000100 62:63:2c:74:77:6f:66:69:73:68:2d:63:62:63:2c:61 bc,twofish-cbc,a
00000110 65:73:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 es128-cbc,twofis
00000120 68:31:32:38:2d:63:62:63:2c:62:6c:6f:77:66:69:73 h128-cbc,blowfis
00000130 68:2d:63:62:63:2c:33:64:65:73:2d:63:62:63:2c:61 h-cbc,3des-cbc,a
00000140 72:63:66:6f:75:72:2c:63:61:73:74:31:32:38:2d:63 rcfour,cast128-c
00000150 62:63:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c bc...+hmac-sha1,
00000160 68:6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68 hmac-md5,hmac-sh
00000170 61:31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39 a1-96,hmac-md5-9
00000180 36:00:00:00:2b:68:6d:61:63:2d:73:68:61:31:2c:68 6...+hmac-sha1,h
00000190 6d:61:63:2d:6d:64:35:2c:68:6d:61:63:2d:73:68:61 mac-md5,hmac-sha
000001a0 31:2d:39:36:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 1-96,hmac-md5-96
000001b0 00:00:00:09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00 ....zlib,none...
000001c0 09:7a:6c:69:62:2c:6e:6f:6e:65:00:00:00:00:00:00 .zlib,none......
000001d0 00:00:00:00:00:00:00 .......
-> NET_SSH2_MSG_KEXINIT (since last: 0.0009, network: 0s)
00000000 ba:0c:4e:f7:26:8e:51:80:3f:0a:10:78:b3:ba:ca:f4 ..N.&.Q.?..x....
00000010 00:00:00:7e:64:69:66:66:69:65:2d:68:65:6c:6c:6d ...~diffie-hellm
00000020 61:6e:2d:67:72:6f:75:70:31:2d:73:68:61:31:2c:64 an-group1-sha1,d
00000030 69:66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72 iffie-hellman-gr
00000040 6f:75:70:31:34:2d:73:68:61:31:2c:64:69:66:66:69 oup14-sha1,diffi
00000050 65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f:75:70:2d e-hellman-group-
00000060 65:78:63:68:61:6e:67:65:2d:73:68:61:31:2c:64:69 exchange-sha1,di
00000070 66:66:69:65:2d:68:65:6c:6c:6d:61:6e:2d:67:72:6f ffie-hellman-gro
00000080 75:70:2d:65:78:63:68:61:6e:67:65:2d:73:68:61:32 up-exchange-sha2
00000090 35:36:00:00:00:0f:73:73:68:2d:72:73:61:2c:73:73 56....ssh-rsa,ss
000000a0 68:2d:64:73:73:00:00:00:e9:61:72:63:66:6f:75:72 h-dss....arcfour
000000b0 32:35:36:2c:61:72:63:66:6f:75:72:31:32:38:2c:61 256,arcfour128,a
000000c0 65:73:31:32:38:2d:63:74:72:2c:61:65:73:31:39:32 es128-ctr,aes192
000000d0 2d:63:74:72:2c:61:65:73:32:35:36:2d:63:74:72:2c -ctr,aes256-ctr,
000000e0 74:77:6f:66:69:73:68:31:32:38:2d:63:74:72:2c:74 twofish128-ctr,t
000000f0 77:6f:66:69:73:68:31:39:32:2d:63:74:72:2c:74:77 wofish192-ctr,tw
00000100 6f:66:69:73:68:32:35:36:2d:63:74:72:2c:61:65:73 ofish256-ctr,aes
00000110 31:32:38:2d:63:62:63:2c:61:65:73:31:39:32:2d:63 128-cbc,aes192-c
00000120 62:63:2c:61:65:73:32:35:36:2d:63:62:63:2c:74:77 bc,aes256-cbc,tw
00000130 6f:66:69:73:68:31:32:38:2d:63:62:63:2c:74:77:6f ofish128-cbc,two
00000140 66:69:73:68:31:39:32:2d:63:62:63:2c:74:77:6f:66 fish192-cbc,twof
00000150 69:73:68:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 ish256-cbc,twofi
00000160 73:68:2d:63:62:63:2c:62:6c:6f:77:66:69:73:68:2d sh-cbc,blowfish-
00000170 63:74:72:2c:62:6c:6f:77:66:69:73:68:2d:63:62:63 ctr,blowfish-cbc
00000180 2c:33:64:65:73:2d:63:74:72:2c:33:64:65:73:2d:63 ,3des-ctr,3des-c
00000190 62:63:00:00:00:e9:61:72:63:66:6f:75:72:32:35:36 bc....arcfour256
000001a0 2c:61:72:63:66:6f:75:72:31:32:38:2c:61:65:73:31 ,arcfour128,aes1
000001b0 32:38:2d:63:74:72:2c:61:65:73:31:39:32:2d:63:74 28-ctr,aes192-ct
000001c0 72:2c:61:65:73:32:35:36:2d:63:74:72:2c:74:77:6f r,aes256-ctr,two
000001d0 66:69:73:68:31:32:38:2d:63:74:72:2c:74:77:6f:66 fish128-ctr,twof
000001e0 69:73:68:31:39:32:2d:63:74:72:2c:74:77:6f:66:69 ish192-ctr,twofi
000001f0 73:68:32:35:36:2d:63:74:72:2c:61:65:73:31:32:38 sh256-ctr,aes128
00000200 2d:63:62:63:2c:61:65:73:31:39:32:2d:63:62:63:2c -cbc,aes192-cbc,
00000210 61:65:73:32:35:36:2d:63:62:63:2c:74:77:6f:66:69 aes256-cbc,twofi
00000220 73:68:31:32:38:2d:63:62:63:2c:74:77:6f:66:69:73 sh128-cbc,twofis
00000230 68:31:39:32:2d:63:62:63:2c:74:77:6f:66:69:73:68 h192-cbc,twofish
00000240 32:35:36:2d:63:62:63:2c:74:77:6f:66:69:73:68:2d 256-cbc,twofish-
00000250 63:62:63:2c:62:6c:6f:77:66:69:73:68:2d:63:74:72 cbc,blowfish-ctr
00000260 2c:62:6c:6f:77:66:69:73:68:2d:63:62:63:2c:33:64 ,blowfish-cbc,3d
00000270 65:73:2d:63:74:72:2c:33:64:65:73:2d:63:62:63:00 es-ctr,3des-cbc.
00000280 00:00:39:68:6d:61:63:2d:73:68:61:32:2d:32:35:36 ..9hmac-sha2-256
00000290 2c:68:6d:61:63:2d:73:68:61:31:2d:39:36:2c:68:6d ,hmac-sha1-96,hm
000002a0 61:63:2d:73:68:61:31:2c:68:6d:61:63:2d:6d:64:35 ac-sha1,hmac-md5
000002b0 2d:39:36:2c:68:6d:61:63:2d:6d:64:35:00:00:00:39 -96,hmac-md5...9
000002c0 68:6d:61:63:2d:73:68:61:32:2d:32:35:36:2c:68:6d hmac-sha2-256,hm
000002d0 61:63:2d:73:68:61:31:2d:39:36:2c:68:6d:61:63:2d ac-sha1-96,hmac-
000002e0 73:68:61:31:2c:68:6d:61:63:2d:6d:64:35:2d:39:36 sha1,hmac-md5-96
000002f0 2c:68:6d:61:63:2d:6d:64:35:00:00:00:04:6e:6f:6e ,hmac-md5....non
00000300 65:00:00:00:04:6e:6f:6e:65:00:00:00:00:00:00:00 e....none.......
00000310 00:00:00:00:00:00 ......
-> NET_SSH2_MSG_KEXDH_INIT (since last: 0.0151, network: 0s)
00000000 00:00:00:80:04:bc:13:ad:9c:ab:d4:d5:16:8a:2a:77 ..............*w
00000010 fd:e0:e3:95:90:cb:1e:e3:e2:f7:72:f5:db:31:d2:ca ..........r..1..
00000020 22:97:38:d4:c0:5c:3f:db:de:99:dc:a7:76:e0:94:ad ".8..\?.....v...
00000030 c7:6e:94:2d:0d:b8:ee:77:41:75:35:03:bf:9a:9f:1f .n.-...wAu5.....
00000040 ae:96:21:39:59:fc:fb:63:da:c7:50:81:80:76:34:e3 ..!9Y..c..P..v4.
00000050 5d:cf:9b:f6:a3:de:bb:c0:16:19:04:3e:81:99:24:92 ]..........>..$.
00000060 4c:d7:50:a4:6c:5f:b7:d4:cb:de:f0:d5:36:ba:4a:7b L.P.l_......6.J{
00000070 19:60:64:48:bc:06:6a:33:fc:e0:a3:fa:5a:6c:c5:0b .`dH..j3....Zl..
00000080 5b:bf:61:28 [.a(
<- NET_SSH2_MSG_KEXDH_REPLY (since last: 0.4882, network: 0.4881s)
00000000 00:00:00:95:00:00:00:07:73:73:68:2d:72:73:61:00 ........ssh-rsa.
00000010 00:00:01:11:00:00:00:81:00:bc:a7:d7:98:5f:d5:ce ............._..
00000020 a4:15:2f:84:52:bf:2e:70:19:e7:85:08:24:21:e9:02 ../.R..p....$!..
00000030 29:3e:a6:6e:f8:c4:f8:6d:6f:db:a6:06:53:20:e2:02 )>.n...mo...S ..
00000040 4d:db:75:16:a3:66:1d:4f:da:1d:63:d0:46:45:b8:f4 M.u..f.O..c.FE..
00000050 5a:37:bd:e4:c1:25:6c:42:3c:44:c2:8b:47:37:3d:27 Z7...%lB.D..G7='
00000060 1a:f0:45:1e:83:fb:5c:c7:b9:36:35:5b:0d:f1:70:b5 ..E...\..65[..p.
00000070 c0:0d:18:c6:39:e9:5a:29:61:8f:3e:47:5e:f1:c8:35 ....9.Z)a.>G^..5
00000080 18:09:c9:ab:08:f3:a6:35:f2:61:3e:93:d4:f8:65:0f .......5.a>...e.
00000090 8e:83:04:28:e8:fa:f5:95:53:00:00:00:81:00:ef:17 ...(....S.......
000000a0 88:86:6f:8f:99:f3:c9:f6:da:8a:cb:30:65:99:8b:c9 ..o........0e...
000000b0 ca:44:7b:d4:86:55:a5:a5:5d:bd:0d:c8:9e:b7:cb:89 .D{..U..].......
000000c0 fd:89:d4:53:7b:80:61:20:8a:59:3b:89:9a:7b:8b:31 ...S{.a .Y;..{.1
000000d0 9a:e7:c2:7f:ba:38:54:96:5b:92:30:cb:a0:c3:b1:2c .....8T.[.0....,
000000e0 68:b4:e7:2e:af:ba:64:73:08:ce:b4:f9:5e:e4:36:07 h.....ds....^.6.
000000f0 d4:34:2a:00:2d:1b:4c:76:c8:67:3d:3a:23:b7:29:a5 .4*.-.Lv.g=:#.).
00000100 e3:45:9a:c2:b1:ed:c9:85:cc:05:15:cb:9d:fc:9b:9e .E..............
00000110 3b:5d:e4:bc:0a:d5:8d:0f:dc:24:d8:e3:ed:0d:00:00 ;].......$......
00000120 00:8f:00:00:00:07:73:73:68:2d:72:73:61:00:00:00 ......ssh-rsa...
00000130 80:5e:a3:72:63:cd:76:8b:8c:6c:49:01:30:1b:b1:aa .^.rc.v..lI.0...
00000140 19:02:93:53:1e:d0:47:ed:8c:c5:02:2e:60:94:5b:eb ...S..G.....`.[.
00000150 60:3e:b2:63:44:bc:d7:6b:bc:4e:af:2d:d9:88:4c:3e `>.cD..k.N.-..L>
00000160 d7:97:fc:c8:2e:8b:27:15:42:bb:a2:3e:b7:8a:8c:64 ......'.B..>...d
00000170 7e:ec:8b:75:dc:64:d2:67:dd:b3:e2:76:a0:56:b9:ab ~..u.d.g...v.V..
00000180 05:3b:2b:73:e0:65:a0:a6:c3:92:e2:a3:db:46:11:eb .;+s.e.......F..
00000190 ca:40:ff:4e:1f:cd:d8:5a:b9:c4:39:f9:81:d2:40:75 .@.N...Z..9...@u
000001a0 a3:8b:e4:61:d1:bd:0a:2a:3e:b7:42:88:58:e1:04:fa ...a...*>.B.X...
000001b0 29 )
-> NET_SSH2_MSG_NEWKEYS (since last: 0.0131, network: 0s)
<- NET_SSH2_MSG_NEWKEYS (since last: 0.0001, network: 0s)
-> NET_SSH2_MSG_SERVICE_REQUEST (since last: 0.0031, network: 0s)
00000000 00:00:00:0c:73:73:68:2d:75:73:65:72:61:75:74:68 ....ssh-userauth
<- NET_SSH2_MSG_SERVICE_ACCEPT (since last: 0.7004, network: 0.7003s)
00000000 00:00:00:0c:73:73:68:2d:75:73:65:72:61:75:74:68 ....ssh-userauth
-> NET_SSH2_MSG_USERAUTH_REQUEST (since last: 0.0002, network: 0s)
00000000 00:00:00:08:75:73:65:72:6e:61:6d:65:00:00:00:0e ....username....
00000010 73:73:68:2d:63:6f:6e:6e:65:63:74:69:6f:6e:00:00 ssh-connection..
00000020 00:08:70:61:73:73:77:6f:72:64:00:00:00:00:08:70 ..password.....p
00000030 61:73:73:77:6f:72:64 assword
<- NET_SSH2_MSG_USERAUTH_SUCCESS (since last: 2.9883, network: 2.9882s)
-> NET_SSH2_MSG_CHANNEL_OPEN (since last: 0.0002, network: 0s)
00000000 00:00:00:07:73:65:73:73:69:6f:6e:00:00:01:00:7f ....session.....
00000010 ff:ff:ff:00:00:40:00 .....@.
<- NET_SSH2_MSG_CHANNEL_OPEN_CONFIRMATION (since last: 0.0984, network: 0.0001s)
00000000 00:00:01:00:00:00:00:00:00:00:40:00:00:00:8c:00 ..........@.....
-> NET_SSH2_MSG_CHANNEL_REQUEST (since last: 0.0003, network: 0s)
00000000 00:00:00:00:00:00:00:09:73:75:62:73:79:73:74:65 ........subsyste
00000010 6d:01:00:00:00:04:73:66:74:70 m.....sftp
<- NET_SSH2_MSG_CHANNEL_SUCCESS (since last: 0.0853, network: 0.0001s)
00000000 00:00:01:00 ....
-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0003, network: 0s)
00000000 00:00:00:00:00:00:00:09:00:00:00:05:01:00:00:00 ................
00000010 03 .
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.089, network: 0.0889s)
00000000 00:00:01:00:00:00:00:09:00:00:00:05:02:00:00:00 ................
00000010 03 .
-> NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0005, network: 0.0001s)
00000000 00:00:00:00:00:00:00:0e:00:00:00:0a:10:00:00:00 ................
00000010 01:00:00:00:01:2e ......
<- NET_SSH2_MSG_CHANNEL_DATA (since last: 0.0901, network: 0.09s)
00000000 00:00:01:00:00:00:00:37:00:00:00:33:68:00:00:00 .......7...3h...
00000010 01:00:00:00:01:00:00:00:01:2f:00:00:00:01:2f:00 ........./..../.
00000020 00:00:0f:00:00:00:00:00:00:10:00:00:00:00:00:00 ................
00000030 00:00:00:00:00:41:c0:55:b1:54:db:55:b1:54:db .....A.U.T.U.T.
问题出在它尝试使用的其中一种算法中。在 Windows 服务器上 aes128-cbc
和 aes256-cbc
都可用时,它窒息了。将它们注释掉可以使连接无错误地完成:
在 Net/SSH2.php 在 _key_exchange()
:
//'aes128-cbc', // RECOMMENDED AES with a 128-bit key
'aes192-cbc', // OPTIONAL AES with a 192-bit key
//'aes256-cbc', // OPTIONAL AES in CBC mode, with a 256-bit key