pythonのparamikoを使用したSFTPで、GETしたときに「PermissionError: [Errno 13] Permission denied: windowsのフォルダ名」

久しぶりに大ハマリ。。。

pythonのparamikoというライブラリを使用してSFTPダウンロードしたファイルをwindowsに保存するだけのプログラムなんだけど、「PermissionError: [Errno 13] Permission denied: フォルダ名」というエラーになってしまう。

Windows10のセキュリティ設定の問題かと思い下記を疑い試してみたが全く改善しなくてハマった。

・フォルダが読み取り専用になっているためにダウンロードしたファイルを置けないため、該当フォルダへの書き込み権限をユーザに与える → それでもPermissionError: [Errno 13] Permission denied
・pycharmを起動しているユーザの権限が足りないため、Administratorで起動して実行してみる → それでもPermissionError: [Errno 13] Permission denied
・pycharmを起動しているユーザが作成したフォルダへ、新しくフォルダを作成してそこにダウンロードを試みる → それでもPermissionError: [Errno 13] Permission denied

これで完全にお手上げで困ったが、ふとプログラムを見直してみる。

import paramiko

ssh_client = paramiko.SSHClient()

ssh_client.connect(hostname, port, username, password)
sftp_connection = ssh_client.open_sftp()
sftp_connection.get(remote, local)

ここでremoteにはファイル取得先SFTPサーバのディレクトリ名を含めたファイル名を、localにはファイルをダウンロードする場所のフォルダ名を指定していた。これが間違い。
getの第2引数であるlocalにはフォルダ名だけではなく、ファイル名まで指定したものを指定しなければならない。
これをフォルダ名だけにしておくとPermissionError: [Errno 13] Permission denied: windowsのフォルダ名」というエラーとなるようだ。