この記事について
サーバーにSSHアクセスするための手順メモです
SSHの仕組み
ご指摘頂いたので削除します
OSによる違い
WindowsのPowerShellにも、LinuxやMacのbash, zshにも、デフォルトでOpenSSHが入っておりほとんど同じ作業で使うことができます。ssh-keygenで鍵を作成して ~/.ssh に鍵を置けば認識してくれますし、設定ファイル ~/.ssh/config の書き方も置き場所も同じです
1. 鍵を作成する
ssh-keygenで作成します
-tで鍵の種類、-Cでコメントを指定します
ssh-keygen -t ed25519 -C "for blog vps"
鍵の種類
鍵の種類は時代や環境に合わせて選択すべきですが、2025年時点で一般的なサーバーに用いるのであればed25519がセキュリティ、パフォーマンスの両面で優れており推奨されるようです
コメント
コメントはSSH接続自体には影響しない文字列で、何のための鍵なのか、誰の鍵なのか分からなくならないように書いておくものです。公開鍵の末尾に平文で追加されます
鍵の書き出しファイルパス
上記を実行するとファイルパスを聞いてきます
OpenSSHは特に指定がない場合は~/.ssh内にある鍵を順番に試すので、デフォルトのパスとして~/.ssh/ed25519が書かれており、そのまま書き出すのでも問題ないと思います
パスフレーズ
最後にパスフレーズを作成するか聞かれます
SSH接続する度に入力しなければならないので面倒ではありますが、秘密鍵を外部の誰かに取られたらかなり危険ですので最低限何かしら付けておく方がいいと思います
2. ~/.ssh/config
~/.ssh/configに接続先ごとの鍵のパスやユーザー名を指定できます
~/.sshに鍵を置いてあるのに認識してくれないとき、~/.sshに置いてある鍵が多すぎてタイムアウトしたり試行回数エラーを起こすときにはこちらに書くと解決することが多いようです
# GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_ed25519_github
IdentitiesOnly yes
# VPS
Host vps-prod
HostName 192.168.11.4
User hoge
IdentityFile ~/.ssh/id_ed25519_vps_prod
IdentitiesOnly yes
IdentitiesOnly yesにしておくと、対象ホストに接続するときに記載の鍵のみを使用しますので、上記のタイムアウトや試行回数エラー対策をするときは必ずyesにします
また、上記では~/.ssh直下に置いていますが、~/.ssh/vps/id_ed25519 のようにフォルダ内に収めても良いですし、全然違う場所に置いても良いようです
3. サーバーに公開鍵を配置する
後は接続先に公開鍵を設定すればSSH接続できるようになります
~/.ssh/authorized_keysに書いておけばアクセスが来た時に試してくれます
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIFCMeHkGTofZQQLjPnRSGisCNJ0TQF6T1hS05ka6tnRr for blog vps
1行を鍵1つとして順番に試してくれますので複数の鍵も登録しておけます
4. サーバーにSSH接続する
1~3の手順で対象サーバーにSSH接続できるようになった筈です
OpenSSHにはsshのほかにもscp, sftp, rsync, sshfsなどのコマンドがありますが、いずれも同じ設定ができていれば使用できます
ssh
192.168.11.4にユーザー名hogeでログインするときは以下のように書きます
デフォルトの22番ポートを使う場合、ポート番号は省略できます
ssh hoge@192.168.11.4
ssh hoge@192.168.11.4:53128
scp
ファイルだけでなくディレクトリ丸ごとコピーすることができます
scp username@xxx.xxx.xxx.xxx:/dir/file_name ./file_name
順番を逆にすると逆向きにコピーできます
上書き警告がでないので注意が必要です
scp ./file_name username@xxx.xxx.xxx.xxx:/dir/file_name
-r オプションをつけると再帰的に複数ファイルをコピーできます
scp -r username@xxx.xxx.xxx.xxx:/dir .
ポートは-Pで指定できます
scp -P 53128 -r username@xxx.xxx.xxx.xxx:/dir/file_name ./file_name
-iで鍵を指定する
scp -i ~/.ssh/id_ed25519_vps_prod -P 53128 -r username@xxx.xxx.xxx.xxx:/dir/file_name ./file_name
IPv6で接続しようとしてIPv4の接続に失敗することがあるそうです
IPv4強制するには-4オプションです
scp -4 -i ~/.ssh/id_ed25519_vps_prod -P 53128 -r username@xxx.xxx.xxx.xxx:/dir/file_name
まとめ
書きながら理解が不十分だったところを確認できました