2016-06-29 7 views
0

이미 SSH2는-연결 사용하여 원격 서버에 연결된, 그리고 난에 연결 한 경우 지금,이 명령 "sshpass -p 'xxxx1248' ssh [email protected] "을 실행하는 SSH2 _exec을 사용하고 있습니다 새로운 원격 서버 내가 그들의 쉘에 액세스하고 싶습니다. 두 번째 원격 서버에서 명령을 실행하는 작업이 있습니다. 나는 어떻게 할 것이냐 ??원격 연결

$connection = ssh2_connect($sIP, $iPort); 

$autherised = ssh2_auth_password($connection, $sUserName, $sPassword); 
$oResult = ssh2_exec($connection, "sshpass -p 'xxxx1248' ssh [email protected]"); 

IP 1x2.1xx.3x.xx의 껍질에 액세스하는 방법. 어떤 일이 이전 할 경우

내가 대상 시스템에서 "ls"의 명령을 실행하는 코드를 제공 할 것입니다

+0

대상 시스템 (1x2.1xx.3x.xx)에서 명령을 실행 하시겠습니까? – ymas

+0

예, 대상 컴퓨터에서 몇 가지 명령을 실행하고 싶습니다. 그리고 첫 번째 명령은 나에게 ENV 변수를 줄 것이고 그 변수를 사용하면 완료하는 데 2-5 분이 걸리는 다른 프로그램을 실행해야합니다. –

답변

0

....이 문제를 해결하십시오. 이것이 당신이 원하는 것이라면 알려주십시오.

$conn = ssh2_connect($host, $port); 
ssh2_auth_password($conn, $user, $pass); 
// runs the ls -al command on $targetHost 
$stream = ssh2_exec($conn, 
    "sshpass -p '{$passTarget}' ssh [email protected]$targetHost ls -al" 
); 

// retrieving the data 
stream_set_blocking($stream, true); 
$output = ssh2_fetch_stream($stream, SSH2_STREAM_STDIO); 

echo stream_get_contents($output); 

이 코드는 $targetHost 컴퓨터에 디렉토리 목록을 출력합니다.

이 정보가 도움이되기를 바랍니다.

편집

: 여기 예를 들어 추가합니다

: 다음

export TEST_VAR=1 

나는에 ssh2_exec 라인을 변경 : 내 대상 컴퓨터에

, 나는 작은 bash는 스크립트, test.sh을 만들어 :

$stream = ssh2_exec($conn, 
    "sshpass -p '{$passTarget}' ssh [email protected]$targetHost 'source test.sh; echo \$TEST_VAR'" 
); 

예상 해상도가 나옵니다. ult : 1

+0

고마워, 네가 원한 똑같은 일이지만,이 명령들은 작동하고있다. 하지만 두 명령을 실행하면 작동하지 않습니다. 처럼 내가 이런 sh 프로그램을 실행하고있다 '$ stream = ssh2_exec ($ conn, "sshpass -p '{$ passTarget}'ssh $ targetUser @ $ targetHost '소스 sequencerConfig.sh; echo $ SEQUENCER_RUNS'" );' sh 프로그램 소스에서 env 변수 $ SEQUENCER_RUNS을 얻으십시오. 이것은 두 번째 명령으로 echo를하고 있습니다. 그 출력은 빈 문자열입니다. –

+0

안녕하세요 Amey, 안전한 편이 되려면, 비슷한 상황을 설정하고 모든 것이 잘 작동합니다. 나는 네가'$'기호를 벗어나지 않았다고 믿는다. 'echo \ $ SEQUENCE_RUNS'을 시도하십시오. 나는 작은 답을 써서 나의 대답을 편집 할 것이다. – ymas