1
1

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 3 years have passed since last update.

複数ホストから一斉にファイルを回収する

Posted at

前回はこちら
前回のおまけのような内容です.

前回は一斉にプログラムを動作させる方法を記載しました.
今回は複数ホストから一斉にファイルを回収する方法を載せておきます.

使い方はなんら変わりません.

paramiko_copy.py
#!/usr/bin/python3
 
import paramiko
import os
import datetime as dt
import scp
 
user = "username"
passwd = "PASSWD"
 
with open("host.txt") as f:
    s = f.readlines()
 
host_name = []
for i in range(len(s)):
    if s[i].startswith('#'): 
        pass
    else:
        host_name.append(s[i].replace("\n",''))
print(host_name)
 
path = "/home/user/paramiko/result/"
for i in range(len(host_name)):
    target_host = host_name[i]
    file_name = path + "*.txt"
    with paramiko.SSHClient() as ssh:
        # 初回ログイン時
        ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
        # ssh接続する
        ssh.connect(target_host, username=user, password=passwd)
 
        print('[SCP転送開始]')
        # scp clientオブジェクト生成
        with scp.SCPClient(ssh.get_transport(), sanitize=lambda x: x) as scp:
            # scp送信する場合はput
            #scp.put('test.csv', '/home/user/paramiko/result/')
 
            # scp受信する場合はget
            scp.get(file_name)

プログラム下部のscp.SCPClient(ssh.get_transport(), sanitize=lambda x: x)の sanitize=lambda x: xは非常に重要である.
今回私は*.txtでファイルを回収しようと考えていたが,サニタイズをしなければ,*(アスタリスク)も通常の文字として判定されてしまう.
ワイルドカードを使わない場合は必要ないかと思うが,実験の結果などは,同一拡張子で保存することが多いので,私はワイルドカードをたくさん使います.
躓いたので参考までに.

サニタイズについて

サニタイズをもっとわかりやすく

1
1
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
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?