본문 바로가기
PHP

[PHP] SSH2를 이용해 다른 서버에 파일 전송하기 (sh2_connect 오류 해결)

by 스타디아 2024. 4. 5.

계속 오류가 발생했는데 시행착오 끝에 해결했다.

기록을 위한 포스팅..

 

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

 

PHP :: Bug #60436 :: ssh2_connect(): Unable to connect to 172.18.xx.xxx on port 22

 

bugs.php.net

 

서버에 아래 한 줄 쳐주니 잘 된다.

setsebool -P httpd_can_network_connect 1

 

저 글에 따르면 원래 apache는 tcp를 이용해 패킷을 보내는게 금지되어 설정을 변경해주어야 한다고 한다..

 

 

2011년 글을 통해 5년 후, 8년 후, 10년 후 개발자들이 도움을 받는다.

그리고 저 먼지 쌓인 글이 13년이 지난 지금의 나에게도..

 

그렇게 위대한 지식은 이어진다..