前回はこちら
前回のおまけのような内容です.
前回は一斉にプログラムを動作させる方法を記載しました.
今回は複数ホストから一斉にファイルを回収する方法を載せておきます.
使い方はなんら変わりません.
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でファイルを回収しようと考えていたが,サニタイズをしなければ,*(アスタリスク)も通常の文字として判定されてしまう.
ワイルドカードを使わない場合は必要ないかと思うが,実験の結果などは,同一拡張子で保存することが多いので,私はワイルドカードをたくさん使います.
躓いたので参考までに.