windows+pythonでsftp¶
Windowsでの接続¶
puttyを使って自動化してみた
rem passwordの事前入力
rem "C:\Program Files (x86)\WinSCP\PuTTY\pageant.exe" path-to.ppk
rem バッチ実行
"C:\Program Files (x86)\WinSCP\WinSCP.com" /script=sftp_sample.txt /log=sftp_sample.log
Set RESULT=%ERRORLEVEL%
Exit %RESULT%
open sftp://user@hostname:22 -privatekey="path-to.ppk"
cd /dir1/dir1_1
ls
close
exit
問題点¶
引数を渡せるけど扱いが面倒
pythonでやってみた¶
import paramiko
import os
HOST = "hostname"
PORT = 22
USER = "user"
PRIVATE_KEY = "path-to-pem-or-ppk"
def ssh_client_ver():
# こちらうまくいかなかったので、メインのほうでためした
ssh = paramiko.SSHClient()
private_key = paramiko.RSAKey.from_private_key_file(PRIVATE_KEY)
ssh.connect(HOST, username=USER, password="", pkey=private_key)
sftp = ssh.open_sftp()
sftp.close()
ssh.close()
def main():
paramiko.util.log_to_file("paramiko_sample_sftp.log")
# 接続
t = paramiko.Transport(HOST)
private_key = paramiko.RSAKey.from_private_key_file(PRIVATE_KEY)
t.connect(username=USER, pkey=private_key)
sftp = paramiko.SFTPClient.from_transport(t)
# 確認用
print(dir(t), "\n")
print(dir(sftp), "\n")
# ディレクトリ情報
print(sftp.getcwd()) # RootはNone
sftp.chdir("dir1/dir1_1")
print(sftp.getcwd())
print(sftp.listdir())
# getの方法
print(sftp.get("remote.txt", "local.txt"))
print(paramiko.SFTPClient.get(sftp, "remote.txt", "local.txt"))
sftp.close()
t.close()
if __name__ == "__main__":
main()