계속 오류가 발생했는데 시행착오 끝에 해결했다.
기록을 위한 포스팅..
1. php-pecl-ssh2를 yum으로 설치했다. 정상 설치 확인했다.
2. 아래와 같이 파일 전송이 가능하다.
(현재 웹서버에는 파일이 저장되길 원치 않아서 전송할 파일을 $_FILES['myfile']['tmp_name']로 했다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<?php
$sftp_server = 'xxx.xxx.xxx.xx';
$sftp_port = xx; // 기본 포트는 22
$sftp_user = 'id';
$sftp_pass = 'pw';
$connection = ssh2_connect($sftp_server, $sftp_port);
echo "connection: {$connection}";
if ( !ssh2_auth_password($connection, $sftp_user, $sftp_pass) ) {
echo "로그인 실패";
}
$sftp = ssh2_sftp($connection);
if (!ssh2_scp_send($connection, $_FILES['myfile']['tmp_name'], "원격지 경로와 파일명", 0644)) {
echo "전송 실패";
}
|
cs |
계속 ssh2_connect($sftp_server, $sftp_port); 부분에서 실패했다.
오류 내용:
<br />
<b>Warning</b>: ssh2_connect(): Unable to connect to 222.234.221.250 on port 38371 in <b>/var/www/html/kpi/test/upload/ftpTransfer.php</b> on line <b>75</b><br />
<br />
<b>Warning</b>: ssh2_connect(): Unable to connect to 222.234.221.250 in <b>/var/www/html/kpi/test/upload/ftpTransfer.php</b> on line <b>75</b><br />
connection: <br />
3. 도착지 서버 firewalld를 확인했지만 꺼져있다.
4. 도착지 서버 상단 방화벽을 확인했지만 문제될게 없었다.
5. 여러 삽질 끝에 10년전 글을 보고 해결할 수 있었다..
https://bugs.php.net/bug.php?id=60436
서버에 아래 한 줄 쳐주니 잘 된다.
setsebool -P httpd_can_network_connect 1
저 글에 따르면 원래 apache는 tcp를 이용해 패킷을 보내는게 금지되어 설정을 변경해주어야 한다고 한다..
2011년 글을 통해 5년 후, 8년 후, 10년 후 개발자들이 도움을 받는다.
그리고 저 먼지 쌓인 글이 13년이 지난 지금의 나에게도..
그렇게 위대한 지식은 이어진다..