Laravel5から、SSHで何かをやりたいならEnvoyを使え!という感じらしいです。
が、昔あったSSHを利用したい場合は、Laravel CollectiveでメンテされているRemote機能を使えばいいようです。
基本的には、本家サイトの通りにやればいいのですが、いくつか不明な点もあったので使い方をメモしておきます。
やりたいこと
- ローカルで生成したファイルをリモートサーバの指定PATHにSCPでコピーしたい
- SSHは鍵ログイン
- SSHが標準で使えないWindowsでも使いたい
使い方(Mac/Linux)
まず、本家ページのガイダンスに従い、composerでライブラリ等を読み込み、config/app.php等を編集した後、artisanで、config/remote.phpを生成します。
手順はこちらの通り。
その他、注意点などを以下に書きます。
remote.phpの設定
鍵のみでの認証の場合、どうしたらいいかわからなかったのですが、下記の記述でOKのようです。
<?php
return [
'default' => 'production',
'connections' => [
'production' => [
'host' => 'remotehost_name',
'username' => 'hoge',
'password' => '',
'key' => '/Users/hoge/.ssh/id_rsa',
'keytext' => '',
'keyphrase' => 'hoge',
'agent' => '',
'timeout' => 10,
],
],
'groups' => [
'web' => ['production'],
],
];
scp(ローカルからリモート)
下記のように記述することでscpでローカルからリモートへファイルコピーができました。
いつもの手抜きでroute.phpに記述。
Route::get('up',function(){
//コピー(ローカルからリモート)
SSH::into('production')->put('/Users/hoge/test.txt','/home/hoge/test.txt');
//return
return 'up';
});
Windowsで利用する
そもそもWindowsにはSSHが無いのでどうするのか調べてみました。
結論から言えば、去年リリースされたWindows対応のOpenSSHを利用すれば問題なく動くようです。
OpenSSHを使う
Windows版のOpenSSHはここからダウンロードできます。
インストール
インストーラーは無いので、Zipファイルを回答し、そこにPATHを通します。私の場合は、x64版をダウンロードし、それをCドライブ直下にコピーしました。
ユーザーのホームディレクトリにUNIX系と同様に.sshフォルダができますので、鍵を利用する場合はそこに鍵をコピーします。
後は、Mac(Linux)と全く同じ手順でSSHを利用できます。
Laravelで試す前に、事前に手動でsshでログインできるかを試して置いた方がいいでしょう。
ssh -i /path/to/key username@remote_hostname
sshが動くなら、おそらくEnvoyも動くのでしょう(試していませんが)。
おまけ
そもそもSFTPができるかをコマンドで確認する方法。いつもはscpしてるので、SFTPの方法をメモ。
鍵をつかってログインするには、下記のようにする。
passphaseがある場合は入力を求められますので入力します。
sftp -o IdentityFile=C:¥Users¥hoge¥.ssh¥id_rsa username@remote_hostname
でサーバにログインしておいて、
>put localfile
等で操作可能。
ログイン後は基本FTPと同じですね。