使用する参考にさせて頂いた記事
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)
# -----------------------------------------------------