複数ホストから一斉にファイルを回収する
前回はこちら
前回のおまけのような内容です.
前回は一斉にプログラムを動作させる方法を記載しました.
今回は複数ホストから一斉にファイルを回収する方法を載せておきます.
使い方はなんら変わりません.
#!/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でファイルを回収しようと考えていたが,サニタイズをしなければ,*(アスタリスク)も通常の文字として判定されてしまう.
ワイルドカードを使わない場合は必要ないかと思うが,実験の結果などは,同一拡張子で保存することが多いので,私はワイルドカードをたくさん使います.
躓いたので参考までに.
Author And Source
この問題について(複数ホストから一斉にファイルを回収する), 我々は、より多くの情報をここで見つけました https://qiita.com/mashi0923/items/4e1fea8fc08d27e8fb98著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .