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
で再起動すればいいのかな。
[SSHの基礎知識]に書いてます。Windows 11などでは標準でコマンドラインなどからssh系のコマンドもつかえるようになっていたりします。
$ 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経由でアクセスするのが一般的かな。
id_rsa.pub の中身(1行)をサーバ側の ~/.ssh/authorized_keys に追加します。
メモ程度に
IETF SECSH key file
-----BEGIN SSH2 PUBLIC KEY-----
Eclipse CVS
Dreamweaver + PuTTY
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 -ではパスワードが必要ですね。
参考