LoginSignup
3
5

More than 5 years have passed since last update.

paramiko+scpで共有サーバにファイル転送する

Last updated at Posted at 2018-03-05

※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()をお忘れずに。

やってみた

  1. paramikoのインストール
    anaconda上でpip install paramiko

  2. ssh接続

ssh-transport.py
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()をお忘れずに。

  1. scp client作成
ssh-transport1.py
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. マージ

ssh-transport.py
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でファイル転送」なので、これだけ短いプログラムでしたが、現在書いている「別サーバからファイル自動取得するスクリプト」とをマージさせたいと思います。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5