私の環境
CLI経由でWindows 7でこのPHPスクリプトを実行しようとしています。
テストの背景
SSH を確立するには、バナー メッセージを送受信する必要があります。「SSH-2.0-whatever\r\n」をサーバーに送信すると、サーバーは「SSH-2.0-whatever\r\n」を返します(これは他の方法でも実行できます)。その後、メッセージが表示されますサーバーがサポートするアルゴリズムが含まれています。すなわち。
(スクリプト 1)
<?php
$fsock = fsockopen('shell.sourceforge.net', 22);
echo fgets($fsock, 1024);
fputs($fsock, "SSH-2.0-test\r\n");
echo fread($fsock, 1024);
出力は次のとおりです。
SSH-2.0-OpenSSH_5.3
♥♀
¶ólÆÆ§w↔F;ï÷╝ähºv ~diffie-hellman-group-exchange-sha256,diffie-hellman-group-e
xchange-sha1,diffie-hellman-group14-sha1,diffie-hellman-group1-sha1 ☼ssh-rsa,s
sh-dss ¥aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3des
-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysator
.liu.se ¥aes128-ctr,aes192-ctr,aes256-ctr,arcfour256,arcfour128,aes128-cbc,3de
s-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc,arcfour,rijndael-cbc@lysato
r.liu.se ihmac-md5,hmac-sha1,umac-64@openssh.com,hmac-ripemd160,hmac-ripemd160
@openssh.com,hmac-sha1-96,hmac-md5-96 ihmac-md5,hmac-sha1,umac-64@openssh.com,
hmac-ripemd160,hmac-ripemd160@openssh.com,hmac-sha1-96,hmac-md5-96 §none,zlib@
openssh.com §none,zlib@openssh.com
コード
したがって、上記の出力を考えると、次の 2 つのスクリプトを順番に実行すると、同じ出力が得られるはずです。
(スクリプト 2)
<?php
$fsock = pfsockopen('shell.sourceforge.net', 22);
echo fgets($fsock, 1024);
(スクリプト 3)
<?php
$fsock = pfsockopen('shell.sourceforge.net', 22);
fputs($fsock, "SSH-2.0-test\r\n");
echo fread($fsock, 1024);
残念ながら、スクリプト 1 は、スクリプト 2 とスクリプト 3 を組み合わせたものと一致しません。スクリプト 3 は、スクリプト 2 がまったく実行されていないかのように実行されているようです。出力:
SSH-2.0-OpenSSH_5.3
SSH-2.0-OpenSSH_5.3
なぜ機能しないのですか?