※2018年3月8日追記
scpだとディレクトリが転送できないことがわかりましたので修正いたしました!
#経緯
python歴1ヶ月の初心者です。間違っていたらコメントで訂正をお願いいたします。
いつもはTeratermを使ってscpコマンドでファイルを共有サーバに転送していたけれど、これを自動的に行う必要がでてきたので、実装に至りました。
今回はpythonのライブラリであるparamikoを使いssh接続を行いscpでファイルを転送するところまでの実装です。
(今後はファイルを自動取得するスクリプトをマージして実装を行う予定です)
実装については以下の記事とGithubを参考に行いました。
『Paramiko + scp 導入 ~ SSH接続 ~ SCPでファイル転送』
https://qiita.com/int_main_void/items/1cdec761b745010629d5
『scp.py』
https://github.com/jbardin/scp.py
#環境
Python 3.6.4
Anaconda 4.3.34
paramiko 2.4.0
(conda forgeでインストールすると2.3.1がインストールされました)
※with構文を使っているので、勝手にopen, closeの処理をしています。使わない場合はscp.close()
をお忘れずに。
#やってみた
-
paramikoのインストール
anaconda上でpip install paramiko
-
ssh接続
import paramiko
with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='XXX.XXX.XXX.XXX', port=22, username='username', password='password')
たったこれだけでssh接続。teratermいちいち開いてられませんね。
※with構文を使っているので、勝手にopen, closeの処理をしています。使わない場合はscp.close()
をお忘れずに。
- scp client作成
import scp
with scp.SCPclient(ssh.get_transport()) as scp:
scp.put('filename', '/upload/to/remote/directory/')
scp.get('/upload/to/remote/directory/')
scpもこれだけでOKみたいです。
4. マージ
import paramiko
import scp
with paramiko.SSHClient() as ssh:
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname='XXX.XXX.XXX.XX', port=22, username='username', password='password')
with scp.SCPclient(ssh.get_transport()) as scp:
scp.put('filename', '/upload/to/remote/directory/')
scp.get('/upload/to/remote/directory/')
これでファイル転送ができると思います。
#今後の発展
今回は純粋に「scpでファイル転送」なので、これだけ短いプログラムでしたが、現在書いている「別サーバからファイル自動取得するスクリプト」とをマージさせたいと思います。