しいしせねっとわーく
[ネットワーク編] [Linuxメモ] [SSL/TLS/PKIの基礎知識] [SSHの基礎知識]

Linux SSHメモ

SSHの基礎知識?

telnet時代はしばらく前に終わり、セキュリティの強化されたSSHが使えるようになっています。SSHは、公開鍵暗号を使い認証をすることができ、通信経路も暗号化されます。
OpenSSHがそのまま使えるようにインストールされているようなので、サーバ側の設定、クライアント側の使い方など?

2023年ではtelnetはすっかり使われなくなっています。現状のおすすめ設定などなどがあるかな。

設定前にパスワード管理

rootにはパスワードを設定します。

ひとり管理者の場合はアプリ、daemonのアカウントにはパスワードを設定してはいけません。root経由で使う方が安全です。sshからログインできなくすれば問題ないかもしれませんが。

パスワードを使うのはもうやめましょう。最終的にはすべてのアカウントのパスワードを無効にします。

ユーザのアカウントには公開鍵のみでパスワードは、ない方がいいですが初期設定は必要かもしれません。

初期段階はとりあえずユーザ→root→アプリアカウントで管理します。

公開鍵をいくつか作ってみる

Windows / Linux どちらでも OpenSSH の ssh-keygen コマンドで鍵を作ることができます。その他 PuTTY や TeraTerm などターミナルアプリでもアプリ専用の形で鍵を作ることができます。

基本的に1アカウントごとに1つ鍵を作ると秘密鍵を移動させる必要がなくてよいのですが、公開鍵を複製する手間もあるので適度に秘密鍵も必要なところへコピーしてもいいのかもしれません。

$ ssh-keygen -t rsa

ユーザの .ssh/id_rsa と .ssh/id_rsa.pub にRSA鍵ペアをつくります。

$ ssh-keygen -t ecdsa

.ssh/id_ecdsa .ssh/id_ecdsa.pub にECDSAの鍵ペアをつくります。他に -t ed25519 もあるかもしれません。

それぞれパスワードを設定できます。 pubがつく方の中身は名前とBASE64符号化された鍵などのテキスト形式です。最後は鍵の名前やコメント的なものなので書き換えることもできます。

公開鍵をログイン先の.ssh/authorized_keys にコピーすることで、公開鍵暗号を利用してログインできる状態になります。authorized_keysには1行に鍵ひとつ、複数の鍵を登録しておくことができます。

$ echo 鍵の中身 >> ~/.ssh/authorized_keys

コピーペーストするならこんな感じなど

アカウントの他、サーバ自体にも個別に鍵があり、~/.ssh/known_hosts には接続先サーバの公開鍵が記録され次回サーバが変わっていないかどうか確認するために使われます。アカウントの鍵もサーバの鍵と同じ方式(新しいものはたぶんECDSA)を使うのがおすすめです。

各種設定

SSHの初期状態では、リモートからもrootアカウントで直接ログインできるなど、あまり安全ではない設定になっています。
この設定を変えるには、/etc/ssh/sshd_config をいろいろと変更します。

# root のリモートログインを不可にする (推奨)
PermitRootLogin no
# パスワード認証を不可にする
PasswordAuthentication no

PrtmitRootLogin の設定には、次のようなのがありました。

他1つ、5つぐらい見かけました。

設定が終われば

# service sshd restart

で再起動すればいいのかな。

Windowsクライアントからの接続

[SSHの基礎知識]に書いてます。Windows 11などでは標準でコマンドラインなどからssh系のコマンドもつかえるようになっていたりします。

Linuxのクライアントを使う

$ ssh -l account servername [ -p port ]

$ ssh account@servername

で、とりあえず目的のサーバに接続することが出来ます。
最初の接続ではサーバのキーが表示され、信頼するかどうか聞いてきます。

サーバの公開鍵(ハッシュ)を知っている場合は比較しましょう。

種類

SSHには、SSH1とSSH2の2種類のプロトコルががありますが、現在はSSH2が使われているはずです。

公開鍵/秘密鍵を使った接続

sshの接続先をサーバ、接続操作をする方をクライアントと呼びますよ。両方サーバでも関係上そう呼びます。

公開鍵はID(複製可能な証明書、印影)、秘密鍵は印鑑/会員証、のようなものです。

基本的に、「クライアント側で」秘密鍵/公開鍵を生成して、公開鍵をサーバ側にコピーしましょう。
不用意にサーバ側で作って漏れてしまったりしないようにしましょう。

公開鍵は他人に見られても大丈夫です。秘密鍵は誰にも見せる必要がありません。サーバ側に置く必要もありません。

  PuTTY OpenSSH 概要
RSA ECDSA DSA
秘密鍵 *.PPK ~/.ssh/id_rsa ~/.ssh/id_ecdsa ~/.ssh/id_dsa クライアント側で必要(パスワードで保護する)
公開鍵 *.pub ~/.ssh/id_rsa.pub ~/.ssh/id_ecdsa.pub ~/.ssh/id_dsa.pub クライアント側公開鍵
サーバに置く公開鍵   ~/.ssh/authorized_keys サーバが信頼する相手の公開鍵の一覧
サーバの公開鍵   ~/.ssh/known_hosts

信頼した接続相手PCの公開鍵の一覧

最初に、秘密鍵と公開鍵のペアを作ります。この2つの鍵は、サーバ側とクライアント側で別々に管理します。秘密鍵は、他人に知られないようにパスワードをかけて保護します。サーバはこの鍵を使って利用者を認証します。

RSAを使うのが一般的でしたが、ECDSAなども利用できるようになっています。DSAは使わない方がよく、RSAは2048bit以上くらいが現在の推奨サイズだったような気がします。

GitなどでもSSH経由でアクセスするのが一般的かな。

鍵の生成(Linux OpenSSH RSAの場合)

  1. ssh-keygen -t rsa (鍵の種類を指定する?)
  2. ~/.ssh/id_rsa が秘密鍵 ~/.ssh/id_rsa.pub が公開鍵

id_rsa.pub の中身(1行)をサーバ側の ~/.ssh/authorized_keys に追加します。

鍵の変換

メモ程度に

IETF SECSH key file

-----BEGIN SSH2 PUBLIC KEY-----

SSHの使えるソフト

Eclipse CVS
Dreamweaver + PuTTY

ssh-agent で自動ログイン

ssh-agent を起動させると、export うにうにが表示されるので、そのまま入力して環境変数を設定します。

ssh-add で、パスワードを一度入力すると、次からは同じパスワードを入力せずに済みます。ssh-add -l で一覧を見ることができ、ssh-add -d で消すことができます。 ssh-agent を終了させると使えなくなります。ssh-agentはユーザごとに1つ起動します。

ssh-agentを使うことで、cvsなどの利用が楽になります。

パスワードレスな時代へ

sshで利用可能になったら、パスワードは無効にしておくのがいいかもしれません。

管理者(root)で

# passwd -d アカウント

を実行するとアカウントのパスワードが無効になります。sshの鍵がないと入れなくなるのでおすすめです。

rootのパスワードも無効にすることができます。sshかsudoでrootになれる環境がある場合だけにしてください。su -ではパスワードが必要ですね。

参考


[しいしせねっと]