PowerShellでscp(ssh)

Windows11環境のPowerShellからSSHの公開鍵認証でscpによるファイルコピーを実現したときの備忘録。

  1. バージョン確認
PS C:\Users\foo> ssh -V
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
  1. キー作成

パスフレーズは入力しないで鍵を生成。

PS C:\Users\foo> ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (C:\Users\foo/.ssh/id_rsa):
Created directory 'C:\Users\foo/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in C:\Users\foo/.ssh/id_rsa.
Your public key has been saved in C:\Users\foo/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:........................................................
The key's randomart image is:
+---[RSA 3072]----+
|   ...........   |
|   ...........   |
|   ...........   |
|   ...........   |
+----[SHA256]-----+
PS C:\Users\foo>
  1. 公開鍵をサーバに追加

sloginってコマンドはPowerShellにはないみたい。 ssh -lでログインするが、ユーザ名@ホスト名って書き方できないんだっけ?

PS C:\Users\foo> ssh -l ユーザ名 ホスト名
ユーザ名@ホスト名's password: パスワードを入力

サーバ側にログイン後、.ssh/authorized_keysにキー作成で作成したid_rsa.pubの内容を追加。

$ cd .ssh
$ chmod 600 authorized_keys
$ cat id_rsa.pub >> authorized_keys
$ chmod 400 authorized_keys

このあと、念のためPowerShellからssh -l でパスワードなしでログインできるか確認しておく。

  1. ファイルコピー

scpを使ってパスワードなしでWindows11ローカルのファイルをサーバ側ホームディレクトリにコピー。 destinationの最後の":"が大事(これがないとローカルの「ユーザ名@ホスト名」というファイル名にコピーするだけ)。":"の後にホームディレクトリの相対パスを指定すればそのパスにコピー。

PS C:\Users\foo> scp コピーしたいファイル名 ユーザ名@ホスト名:
コピーしたいファイル名                              100%   23MB 890.7KB/s   00:25

参考サイト

https://click.jp/knowledge/1476/

https://monolithon.net/archives/2019/07/550