13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

scp.SCPClient().get()と.put()を調べた

Posted at

使用する参考にさせて頂いた記事
https://qiita.com/int_main_void/items/1cdec761b745010629d5

経緯

pythonでリモートサーバのファイルをコピー取得したいってなった時に

$ pip install paramiko
$ pip install scp
import paramiko
import scp

# サーバに繋ぐ
with paramiko.SSHClient() as sshc:
  sshc.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  sshc.connect(hostname='XXX.XXX.XXX.XXX', port=22, username='hoge', password='hogehoge')

  # SSHClient()の接続設定を合わせてあげる
  with scp.SCPClient(sshc.get_transport()) as scpc:
    scpc.get('取得したいファイルのパス')

と、上記のようにすればファイルがコピー取得され、
取得したファイルはローカルの実行した.pyファイルと同じ階層の所に保存されますが、
やはり、ファイルの用途に合わせて保存先を分けたいと思い...

これって、保存先のパス指定できるはずだよね?

と思い、scp.SCPClient().get()の引数で存在するはずと思って調べました。

調査結果(筆者が理解できたところまで)

リポジトリ元が綺麗にまとめてくれていて良かったです
https://github.com/jbardin/scp.py

get()

パラメータ 説明
remote_path string リモートサーバ先から取得したいファイルのパス。ワイルドカードや環境変数を用いることも出来るらしい。
local_path string ローカルの受け取り先パス。
recursive boolean 再帰的に転送するかの設定。
preserve_times boolean 転送されたファイルのmtimeとatimeを保存するかの設定。
get_example.py
with scp.SCPClient(ssh.get_transport()) as scpc:
  scpc.get(
    remote_path='取得したいファイルパス',
    local_path='保存先のパス',
    recursive=True, #再帰的に転送するならTrue
    preserve_times=True #mtimeとatimeを保存したいならTrue
  )

put()

パラメータ 説明
files string または リスト型 ローカルから転送したい単一パス、またはパスのリスト。
ディレクトリを転送する場合はrecursive=Trueにする必要がある。
remote_path string リモートサーバ先の受け取り先パス。デフォルトは./
recursive boolean 再帰的に転送するかの設定。
preserve_times boolean 転送されたファイルのmtimeとatimeを保存するかの設定。

最後に

表向きのリポジトリ元のコードの使用例には、簡易的に書けるようにパラメータが省略されていたので、それを参考にされている方が多いのかなと思いました。

origin_example.py
from paramiko import SSHClient
from scp import SCPClient

ssh = SSHClient()
ssh.load_system_host_keys()
ssh.connect('example.com')

# SCPCLient takes a paramiko transport as an argument
scp = SCPClient(ssh.get_transport())

# -------------------- この部分 -------------------------
scp.put('test.txt', 'test2.txt') #(files, remote_path)
scp.get('test2.txt') #(remote_path)
# -----------------------------------------------------
13
10
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
13
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?