phpseclib 0.3.6을 사용하여 Windows Server 2003 Standard 32 비트에서 PHP vc9 NTS 5.3.28을 실행 중입니다. Palo Alto Networks 방화벽에 연결하고 암호 해시 명령을 실행하는 스크립트를 작성하려고합니다. 내가 다음 코드는 결코 다음 $하고 ssh> 읽기 존재하지 않는에서는 setTimeout (10)를 생략하는 경우PHP에서 SSH2 결과 구문 분석
- :
<?php include 'Net/SSH2.php'; define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); $ssh = new Net_SSH2('hostname'); echo ">Logging in...\n"; if (!$ssh->login('user', 'password')) { exit('Login Failed'); } echo ">Reading login results...\n"; /*echo $ssh->exec('request password-hash password test123');*/ $output = $ssh->read('[email protected]>'); echo $output . "\n"; echo ">Writing request...\n"; $ssh->write("request password-hash password test123\n"); $ssh->setTimeout(10); echo ">Reading result...\n"; $output = $ssh->read('/^\$1\$.*$/', NET_SSH2_READ_REGEX); echo $output . "\n"; echo ">Done.\n"; file_put_contents ('E:\PHP53\ssh2.log', $ssh->getLog()); ?>
나는 위의 코드에 두 가지 문제가 있습니다 : 나는 다음과 같은 코드가 있습니다. 내가 가지고있는 경우, 코드는 타임 아웃 후에 만 존재하지만 결과를 반환합니다. 그것은 반환이 안 잔뜩 포함되어
결과 :?????
[Kuser @ PA-3020> 요청 암호 해시 암호 test123 [1 시간 = 24; 1H [K는 $ 1 $ dgkhwrxe $ kddYFmKCq9.zfiBKPAyN61는
는 [24;?????? 1H는 [K는 [1리터는> 사용자 @의 PA-3020>
가 난 단지 라인을 원하는 그 시작 $ 1 $ (위 3 번 줄). 나는 그것이 정규식과 관련이 있다고 생각하지만, 나는 무엇을 알아낼 수 없다. 아래 neubert의 제안으로 당
읽어 $ 출력 = $하고 ssh>로 라인을 교체 :
[email protected]> request password-hash password test123
$1$pxqhdlco$MRsVusWtItC3QiMm4W.xZ1
[email protected]>
업데이트 : 퍼티와 대화식으로 명령을 실행하면
나는 다음과 같은 얻을. ... 다음 코드로 작동합니다
$output = $ssh->read('/\$1\$.*/', NET_SSH2_READ_REGEX);
$output = preg_replace('/.*\$1\$/s','\$1\$', $output);
File_ANSI 모듈이 필요하지 않다고 생각하여 실제로 이스케이프 시퀀스를 처리 할 필요가 없습니다. ← [Kchris @ PA-3020> 요청 암호 해시 암호 test123 ← [? 1h ← = ← [24; 1H ← [K $ 1 $ – Caynadian
당신이 제공 한 정규 표현식을 사용하면 다음과 같은 메시지가 나타납니다. 네가 원했던 $ 1 달러를 받고있다. 또는 $ 1 $이 (가) 온 라인 전체를 원하십니까? 그렇다면'\ $ 1 \ $. * $'이 (가) 작동 할 수도 있습니다. 당신의 코드를 다시 보면 나는 두 개의 $ 사이에 있다고 생각합니다. 그래서 줄 끝의 $가 작동하지 않는다고 말하면서 misspoke를했을 것입니다. – neubert
나는 그 전체 라인과 아무것도 필요로하지 않습니다. $ 1 $. 위의 예에서 "$ 1 $ dgkhwrxe $ kddYFmKCq9.zfiBKPAyN61"문자열을 얻으려고합니다. – Caynadian