この記事では、phpでsftpを使うチュートリアルを中心に、ftpプロトコル、sshプロトコル、sftpプロトコルの導入、FTPとSFTPの操作クラスの実装について説明します。コードは必須です。お友達が参照できます
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 |
/** phpでのSFTP使用チュートリアル Telnet、FTP、SSH、SFTP、SSL (1) FTPプロトコルの紹介
FTP (ファイル転送プロトコル) は、インターネット上でファイルを転送するために FTP を使用して一般的に使用されているプロトコルの 1 つです。 他の多くの通信プロトコルと同様に、FTP 通信プロトコルもクライアント/サーバー アーキテクチャを採用しています。ユーザーはさまざまな FTP クライアント プログラムを使用できます FTP サーバーに接続してファイルをアップロードまたはダウンロードするには、FTP プロトコルを使用します。FTP コマンドの送信とデータの送信は、別のポートを介して送信されます。 FTP は、TCP/IP の特定のアプリケーションであり、OSI モデルの第 7 層と、アプリケーション層である TCP モデルの第 4 層で動作します。このように、FTP クライアントはサーバーとの接続を確立する前によく知られている「3 ウェイ ハンドシェイク」プロセスを通過する必要があります。これがもたらす重要な点は、クライアントとサーバー間の接続が信頼できることです。 接続指向であり、データ送信の信頼できる保証を提供します。
(2)sshプロトコル
ssh の正式名は SecureShell で、送信されるデータをすべて「仲介者」が取得できないように暗号化できます 送信データは圧縮されており、これにより送信速度が向上します。SSH には Telnet に代わる多くの機能があり、ftppop に安全なチャネルも提供します 。
SSH プロトコル フレームワークの最も重要な部分は 3 つのプロトコルです:
* トランスポート層プロトコルは、サーバー認証、データの機密性、情報の整合性などのサポートを提供します。 * ユーザー認証プロトコルはサーバーにクライアント ID 認証を提供します。* 接続プロトコルは、上位層のアプリケーション プロトコルで使用できるように、暗号化された情報トンネルを複数の論理チャネルに多重化します。 さまざまな高レベルのアプリケーション プロトコルは、SSH 基本システムから比較的独立しており、この基本フレームワークに依存して、接続プロトコルを通じて SSH セキュリティ メカニズムを使用します。
(3)SFTPプロトコル SSH プロトコルを使用した FTP 転送のプロトコルは SFTP (Secure File Transfer) と呼ばれ、Sftp と Ftp はどちらもファイル転送プロトコルです。違い: sftp は ssh に含まれるプロトコルです (ssh は暗号化された Telnet プロトコルです)。 sshd サーバーが起動している限り使用できますが、sftp はより安全であり、ftp サーバーを起動する必要はありません。 sftp = ssh + ftp (安全なファイル転送プロトコル)。 FTPは平文で送信されるため、 セキュリティはありませんが、sftpはsshをベースにしており、通信内容は暗号化されているため安全です。現在のネットワークはあまり安全ではありません。これまで Telnet を使用していた人は ssh2 に切り替えています (SSH1 はクラックされています)。 sftpはftpと一緒に使うツールです 方法は同じです。ただし、送信されるファイルはSSLで暗号化されており、たとえ傍受されても解読することはできません。さらに、sftp には、ファイル属性の設定など、ftp よりも多くの機能があります
*/
// これは FTP を紹介するだけであり、検証するものではないことに注意してください。 クラスftp{
//初期設定は NULL です プライベート $config =NULL ; // 接続は NULL です プライベート $conn = NULL;
パブリック関数 init($config){ $this->config = $config; }
// FTP接続 パブリック関数 connect(){ return $this->conn = ftp_connect($this->config['host'],$this->config['port'])); }
//データの送信トランスポート層プロトコル、データの取得 true または false パブリック関数ダウンロード($remote, $local,$mode = 'auto'){ return $result = @ftp_get($this->conn, $localpath, $remotepath, $mode); }
//データの送信トランスポート層プロトコル、データのアップロード true または false パブリック関数アップロード($remote, $local,$mode = 'auto'){ return $result = @ftp_put($this->conn, $localpath, $remotepath, $mode); }
//ファイルを削除する パブリック関数remove($remote){ return $result = @ftp_delete($this->conn_id, $file); }
}
// を使用します$config = 配列( 'ホスト名' => 'ローカルホスト', 'ユーザー名' => 'root', 'パスワード' => 'root', 'ポート' => 21
);
$ftp = 新しい Ftp(); $ftp->connect($config); $ftp->upload('ftp_err.log','ftp_upload.log'); $ftp->download('ftp_upload.log','ftp_download.log');
/*上記 3 つのプロトコルに基づいて ssh に基づいて ftp クラスを作成します ID 認証を実行するには、公開キーとパスワードの 2 つの方法があることがわかっています。 (1)パスワードでログイン(2) パスワードフリーログインとは、公開鍵を使用してログインすることを意味します
*/
クラスSFTP{
//初期設定は NULL です プライベート $config =NULL ; // 接続は NULL です プライベート $conn = NULL;
//ログインに秘密キーを使用するかどうか private $use_pubkey_file= false;
//初期化 パブリック関数 init($config){ $this->config = $config ; }
// ssh に接続します。接続方法は 2 つあります (1) パスワードを使用します // (2) 秘密鍵を使用する パブリック関数 connect(){
$methods['hostkey'] = $use_pubkey_file : [] ; $con = ssh2_connect($this->config['host'], $this->config['port'], $methods); //(1)秘密鍵を使用する場合 if($use_pubkey_file){ //ユーザー認証プロトコル $rc = ssh2_auth_pubkey_file( $コン、 $this->config['user'], $this->config['pubkey_file'], $this->config['privkey_file'], $this->config['パスフレーズ']) ); //(2) ログインユーザー名とパスワードを使用します }その他{ $rc = ssh2_auth_password( $conn, $this->conf_['user'],$this->conf_['passwd']);
}
$rc を返します ; }
//データの送信 トランスポート層プロトコル、データの取得 パブリック関数ダウンロード($remote, $local){
return ssh2_scp_recv($this->conn_, $remote, $local); }
//データトランスポート層プロトコルを送信し、FTPサーバーデータを書き込みます パブリック関数アップロード($remote, $local,$file_mode=0664){ return ssh2_scp_send($this->conn_, $local, $remote, $file_mode);
}
//ファイルを削除する パブリック関数remove($remote){ $sftp = ssh2_sftp($this->conn_); $rc = false;
if (is_dir("ssh2.sftp://{$sftp}/{$remote}")) { $rc = false ;
// ssh フォルダーを削除 $rc = ssh2_sftp_rmdir($sftp, $remote); } 他 { //ファイルを削除する $rc = ssh2_sftp_unlink($sftp, $remote); } $rc を返す;
}
}
$config = [ "host" => "192.168.1.1 ", // FTP アドレス 「ユーザー」=>「***」、 「ポート」 => 「22」、 "pubkey_path" => "/root/.ssh/id_rsa.pub", // 公開鍵の保存アドレス "privkey_path" => "/root/.ssh/id_rsa", // 秘密鍵の保存アドレス ];
$handle = 新しい SftpAccess(); $handle->init($config); $rc = $handle->connect(); $handle->getData(remote, $local);
|