good-arrow’s blog

https://good-arrow.net/

Powershell で SCP ファイル転送の自動化

以前、Linux の SCPファイル転送を自動化させるための、パスワード入力省略方法を掲載しました。
scp でパスワードを記憶させる - good-arrow’s blog


それの Powershell 版です。



Windows 10 オプション機能の OpenSSH クライアントを追加する

Windows 10 で [設定] → [アプリ] → [オプション機能] → [オプション機能を追加する] を開き、
「OpenSSH クライアント」を追加する。
f:id:harukeee:20220304104546p:plain



パスワードを記憶させる

Powershell を起動して、以下を実行するだけになります。
{USERNAME} は接続先のアカウント、{IP_ADDRESS}は接続先IPアドレスに置き換えてください。

ssh-keygen

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh {USERNAME}@{IP_ADDRESS} "mkdir .ssh && chmod 700 .ssh && cat >> .ssh/authorized_keys && chmod 600 .ssh/authorized_keys"

username@192.168.x.x's password:(接続先のパスワードを入力)



接続テスト

SSH 接続

ssh {USERNAME}@{IP_ADDRESS}

SCPファイル転送

scp ./test.txt {USERNAME}@{IP_ADDRESS}:~/



解説

単にローカルの $env:USERPROFILE\.ssh\id_rsa.pub
Linux側の~/.ssh/authorized_keys にコピーしている。

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh {USERNAME}@{IP_ADDRESS} "mkdir .ssh && chmod 700 .ssh && cat >> .ssh/authorized_keys && chmod 600 .ssh/authorized_keys"


下記の部分は ssh-copy-id コマンド実行時のアクセス権を厳密に模倣している。

mkdir .ssh                         #ディレクトリの作成
chmod 700 .ssh                     #ディレクトリのアクセス権を設定
cat >> .ssh/authorized_keys        #authorized_keysを作成
chmod 600 .ssh/authorized_keys     #authorized_keysのアクセス権を設定


アクセス権を省略したmkdir .sshだけの下記でもいいですが、推奨はしません。

type $env:USERPROFILE\.ssh\id_rsa.pub | ssh {USERNAME}@{IP_ADDRESS} "mkdir .ssh && cat >> .ssh/authorized_keys"