SSH 設定系
ssh USER_NAME@HOST
# -i 秘密鍵指定
# -v デバッグモード
暗号鍵
暗号鍵 作成
# 鍵の作成(RSA暗号,4096バイト?)
ssh-keygen -t rsa -b 4096
# 実行例:
# [UserName@rhel ~]$ ssh-keygen -t rsa -b 4096
# Generating public/private rsa key pair.
# Enter file in which to save the key (/home/UserName/.ssh/id_rsa): # 作成先を聞かれる。EnterのみでもOK
# Enter passphrase (empty for no passphrase): # パスフレーズを聞かれる。不要ならEnter
# Enter same passphrase again: # 再度パスフレーズを聞かれる
# Your identification has been saved in /home/UserName/.ssh/id_rsa.
# Your public key has been saved in /home/UserName/.ssh/id_rsa.pub.
# :
# :
# [UserName@rhel ~]
# [UserName@rhel ~]$ ls -l ~/.ssh/
# 合計 12
# -rw-------. 1 UserName UserName 3369 m月 dd 00:00 id_rsa # 作成された秘密鍵(以後 secret.key)
# -rw-r--r--. 1 UserName UserName 736 m月 dd 00:00 id_rsa.pub # 作成された公開鍵(以後 public.key)
暗号鍵 登録 (接続先サーバの 対象ユーザに登録)
要は公開鍵を リモートの~/.ssh/authorized_keysに追記すればいいのだが、ssh-copy-id
というコマンドがある。
# リモートへ公開鍵を転送する
ssh-copy-id -i secret.key ${USER}@${target_host}
# -i なしの場合、~/.ssh/id_rsa.pub が使用される
# 接続テスト
ssh UserName@10.0.0.xxx -i secret.key
# memo
ssh-keygen -y -f secret.key > public.key # 秘密鍵から公開鍵作成
ssh-keygen -l -f secret.key # 鍵の強度確認
ssh-keygen -R 10.0.0.100 # フィンガープリント削除
セキュリティ系
sshd_configでの制限
/etc/ssh/sshd_config
の設定を変更する
rootログインを禁止する場合
#PermitRootLogin yes
↓ 修正 ↓
PermitRootLogin no
#PasswordAuthentication yes
↓ 修正 ↓
PasswordAuthentication no
AllowUsers user01
# 設定に問題がないかテスト(何も表示されなければOK)
sshd -t
# 更新
systemctl restart sshd
コピペ用
# 現在の設定を確認
grep -E 'PermitRootLogin|PasswordAuthentication|AllowUsers' /etc/ssh/sshd_config
# 設定の追加
echo "PermitRootLogin no" >> /etc/ssh/sshd_config
echo "PasswordAuthentication no" >> /etc/ssh/sshd_config
# 設定に問題がないかテスト(何も表示されなければOK)
sshd -t
# 更新
systemctl restart sshd
known_hosts から削除
ssh-keygen -R 10.0.0.xxx
sftp 設定
- sftp時のumask値設定
/etc/ssh/sshd_config
で以下のように設定
# 以下で設定
Subsystem sftp /usr/libexec/openssh/sftp-server –u 002
# 特定ユーザーの場合は以下に記載
Match User user01,user02
ForceCommand /usr/libexec/openssh/sftp-server -u 000
~/.ssh/config
- 接続先情報を登録可能
vi ~/.ssh/config
# 記載例 ----------
Host <任意のALIAS>
HostName <IP_ADDRESS>
User <USER_NAME>
# Port ポート番号
IdentityFile <秘密鍵のパス>
# ServerAliveInterval 60
# ----------
# 使い方
ssh <指定したALIAS>
SSH ポートフォワード (踏み台)
ssh -L 8080:192.168.0.3:80 user@10.0.0.2
-f : バックグラウンドで動作
-N : コマンド実行無し
[ 操作端末 ]
10.0.0.1
|
10.0.0.2
[ 踏み台SV ]
192.168.0.2
|
192.168.0.3
[ 目的 webSV ]
sshキー(秘密鍵・公開鍵)の作成と認証 流れ - Qiita
WindowsにSSHアクセス
WindowsServer2019で確認
OpenSSHをインストールすれば大丈夫。
OpenSSH をインストールする | Microsoft Docs
流れは 1. OpenSSHインストール 2. OpenSSHサービス起動・自動起動有効化 3. FireWallの穴あけは不要 (インストール時点で空く)
ただし、クライアントから ssh-copy-id は出来なかった(少なくとも初期設定では)
GUIの場合
設定 > アプリ > オプション機能の管理 > +機能の追加 > OpenSSHサーバー ⇒ インストール
PowerShellの場合
# OpenSSH が使用可能か確認 (-Online とか書いてあるけどネット繋がってなくても成功)
Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
# 実行例
# PS C:\Users\Administrator> Get-WindowsCapability -Online | Where-Object Name -like 'OpenSSH*'
#
# Name : OpenSSH.Client~~~~0.0.1.0
# State : Installed
#
# Name : OpenSSH.Server~~~~0.0.1.0
# State : NotPresent
# Install the OpenSSH Server
Add-WindowsCapability -Online -Name OpenSSH.Server~~~~0.0.1.0
# Start the sshd service
Start-Service sshd
# Set 'Automatic' for the sshd StartupType
Set-Service -Name sshd -StartupType 'Automatic'
sshd設定変更時 別穴を用意
通信フロー
ChatGPTで生成。あっている?
sequenceDiagram
participant クライアント
participant サーバー
クライアント->>サーバー: TCP ハンドシェイク
サーバー-->>クライアント: SSH バージョン & ソフトウェア情報
クライアント-->>サーバー: SSH バージョン & ソフトウェア情報
Note over クライアント,サーバー: 鍵交換アルゴリズムの交渉
クライアント->>サーバー: 優先するアルゴリズム
サーバー-->>クライアント: 選択されたアルゴリズム
Note over クライアント,サーバー: Diffie-Hellman 鍵交換
クライアント->>サーバー: DH クライアント公開鍵
サーバー->>クライアント: DH サーバー公開鍵
サーバー->>クライアント: サーバーのホスト鍵(署名付き)
Note over クライアント,サーバー: 共有秘密鍵を生成
Note over クライアント: サーバーのホスト鍵を検証
クライアント->>サーバー: 新しいセッション鍵
Note over クライアント,サーバー: 対称暗号化が始まる
クライアント->>サーバー: 暗号化されたSSHコマンド
サーバー-->>クライアント: 暗号化されたSSHレスポンス