PowerShellでscp(ssh)
Windows11環境のPowerShellからSSHの公開鍵認証でscpによるファイルコピーを実現したときの備忘録。
- バージョン確認
PS C:\Users\foo> ssh -V OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
- キー作成
パスフレーズは入力しないで鍵を生成。
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>
- 公開鍵をサーバに追加
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 でパスワードなしでログインできるか確認しておく。
- ファイルコピー
scpを使ってパスワードなしでWindows11ローカルのファイルをサーバ側ホームディレクトリにコピー。 destinationの最後の":"が大事(これがないとローカルの「ユーザ名@ホスト名」というファイル名にコピーするだけ)。":"の後にホームディレクトリの相対パスを指定すればそのパスにコピー。
PS C:\Users\foo> scp コピーしたいファイル名 ユーザ名@ホスト名: コピーしたいファイル名 100% 23MB 890.7KB/s 00:25