PHPでssh接続して、リモートサーバにあるファイルをダウンロードしたかった。
ssh_scp_recvでも受信はできるが、普段の、ファイルストリーム系関数を使ってできるようなので、せっかくなのでそれでやってみる。
なお、今回は、sshは公開鍵認証で接続した。もちろん、ユーザ名とパスワードで接続することもできる。
キーペアの準備
事前に、キーペアを用意し、公開鍵をリモートのサーバへ登録しておく。
もちろん、秘密鍵は他の人に読めるようにしておいてはいけない。
PHPで接続する際は、どちらも必要になるので、ローカルのサーバに用意しておく。
ソースコード
ソースコードは以下。
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 |
public function ssh_stream_test() { $hostname = 'yourhostname.com'; $pubkey = '/pass/to/pubkey'; $prikey = '/pass/to/prikey'; $username = 'username'; $conn = ssh2_connect($hostname); $isSuccess = ssh2_auth_pubkey_file($conn, $username, $pubkey, $prikey); if (!$isSuccess) { return false; } $sftp = (int)ssh2_sftp($conn); $remotefile = "ssh2.sftp://$sftp/home/username/aaa.txt"; $remotedir = "ssh2.sftp://$sftp/home/username/"; //例えば、ファイルポインタ使って読み込み。 $fp = fopen($remotefile, 'r'); echo fgets($fp); fclose($fp); //手っ取り早くメモリへ読み込む。 echo file_get_contents($remotefile); //ディレクトリ読み込み。 if (is_dir($remotedir)) { $files = scandir($remotedir); foreach ($files as $file) { echo $file; } } } |
コメント