この方法を使えばsshの公開鍵認証をできるだけでなくファイル転送をできるようになります。
*作成したVMにsshの公開鍵認証を行うと類似した内容が多数あります。
この記事ではクライアント側の操作は(クライアント)、ホスト側の操作は(ホスト)と書いてあります。

環境¶
- windows10
- powershell7
- 踏み台サーバーを通したVM接続
- 公開鍵は作成済み
sshの鍵を確認(クライアント)¶
作成したVMにsshの公開鍵認証を行う 公開鍵を出力(クライアント) を見て行ってください。
公開鍵認証をする(ホスト)¶
作成したVMにsshの公開鍵認証を行う サーバ側(VM側)の操作(ホスト) を見て行ってください。
VMのIPアドレスを調べる(ホスト)¶
IPアドレスを調べるコマンド ip コマンドを使用します
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 00:0c:29:1b:03:67 brd ff:ff:ff:ff:ff:ff
inet 192.168.100.84/24 brd 192.168.100.255 scope global dynamic ens160
valid_lft 31594sec preferred_lft 31594sec
inet6 fe80::20c:29ff:fe1b:367/64 scope link
valid_lft forever preferred_lft forever
設定ファイルを変更する(クライアント)¶
クライアント ⇒ 踏み台サーバー ⇒ VMを1回のsshで繋ぎます。
notepad .ssh\config
以下の様に書き加えます。 ```.ssh/config ForwardAgent yes <踏み台サーバーの情報の例> Host <踏み台サーバーのHost名> Hostname 10.203.63.52 User <ユーザー名> Port 22000 IdentityFile ~/.ssh/id_ed25519 DynamicForward 10080
<接続したいVM> Host <自分が入れたい文字> Hostname <VMのIPアドレス> User <ユーザー名> Port 22 IdentityFile ~/.ssh/id_ed25519 ProxyCommand ssh -W %h:%p <踏み台サーバーのHost名>
| 属性 | 値 |
| -------- | -------- |
| ForwardAgent | 既に書いている場合は入れなくていいです。 |
| Host | VM 名だと覚えやすいですが、好きな文字を入れましょう。最終的にターミナルに「ssh 自分の入れた文字」を入力することで VM に ssh 接続します。 |
| Hostname | VM の IP アドレスを入力しましょう。 |
| User | VM に登録したユーザー名を入力してください。 |
| Port | デフォルトは22番です。VM側で Port 番号を変更しているなら変更した Port 番号を入力してください。 |
| IdentityFile | 秘密鍵の場所を入力します。今回は id_ed25519.pub の共通かぎを VM に登録するので、秘密鍵 id_ed25519 を登録します。 |
| ProxyCommand | -W:netcat モードを有効にするオプション<br>%h:接続するホスト名に置き換え<br> %p :ポート番号に置き換え<br>つまり<踏み台サーバーのHost名>を参考にホスト名とポート番号を置き換えてssh接続を1回で済ませる処理をしています。 |
# ファイルを転送します(クライアント)
本題です。
ssh で接続できるか確認しましょう。下記のコマンドを入力してVM内にはいれれば成功です。
***コマンドを入力する場所は踏み台内ではなくクライアント内です。**
```sh
ssh <Host名>
sftpを使います。
sftp <VMのHost名>
Connected to work.
sftp>
ローカルファイルをVMに送る¶
もしかしたら絶対パスでしか通らな可能性があります。送りたいファイルのパスを調べて送りましょう。
put <ローカルファイル>
ログアウト¶
exit
例¶
sftp> put C:\Users\c01180500b.LAPTOP-KF4IA0NC\Downloads\log\nginx-copy\newlog*
Uploading C:/Users/c01180500b.LAPTOP-KF4IA0NC/Downloads/log/nginx-copy/newlog00.log to /home/ono/newlog00.log
C:/Users/c01180500b.LAPTOP-KF4IA0NC/Downloads/log/nginx-copy/newlog00.log 100% 1962KB 9.7MB/s 00:00
Uploading C:/Users/c01180500b.LAPTOP-KF4IA0NC/Downloads/log/nginx-copy/newlog01.log to /home/ono/newlog01.log
C:/Users/c01180500b.LAPTOP-KF4IA0NC/Downloads/log/nginx-copy/newlog01.log 100% 1920KB 3.4MB/s 00:00
C:/Users/c01180500b.LAPTOP-KF4IA0NC/Downloads/log/nginx-copy/newlog02.log 100% 1554KB 2.4MB/s 00:00
sftp> exit
参考文献¶
- ssh 公開鍵認証
- ファイルの所有者や許可
- 多段sshの方法
- sftpの方法