Macのターミナルから公開鍵認証する方法

普段WindowsとMacから作業をしていますが、パスワード認証をやめて最近は公開鍵認証にしています。やり方わからないので検索してみました。

など他にも多数のサイトがあります。さて、Macのターミナルの方では僕には疑問がでてきました。

そもそもMacで秘密鍵作る必要ないのでは?

hatena_logw_title

WindowsでログインするときにWindowsで秘密鍵とか作ってサーバーにアップロードするという手間はしていません。そもそもサーバーで作った公開鍵をWindows側で読み込んでログインしているだけなのでクライアント側の作業は必要ありません。けどなんでMacのターミナルだけ作らないといけないという謎な事がおきるのか。。僕の考えとしてはいらないのでは?と思い実際に作業をしてみました。

結論

別にMacで秘密鍵作ってサーバーにアップする必要性は特になし。

環境

  • サーバー:CentOS7
  • クライアント:Mac、Win

やりたいこと

CentOSへ公開鍵をつかって鍵認証。実際にやっていきたいと思います。

CentOSでの作業

前提として、root権限でログインするのではなくlogwというユーザーでログインするということにします。なのでパスワード認証、サーバーのコンソール画面からパスワード認証でユーザーlogwとして入り、デフォルトのホーム画面/home/logwにいると仮定します。


ssh-keygen -t rsa

 

.ssh ディレクトリに id_rsa という秘密鍵と、id_rsa.pub という公開鍵があるのを確認します。

$ cd .ssh/
$ ls
id_rsa  id_rsa.pub

公開鍵認証できるように設定します。

$ mv ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys
$ chmod 600  ~/.ssh/authorized_keys

公開鍵認証のログインの設定

公開鍵でログインできるようにします。rootにユーザーを切り替えてファイルの編集をします。

vi /etc/ssh/sshd_config

いかの箇所を修正します

PubkeyAuthentication yes

SSHのサービスを再起動します。

systemctl restart sshd.service

これで完了です。今度はMacのターミナルで接続出来るようにするため、一度SFTPなどで/home/logw/.ssh/の中にあるid_rsaという秘密鍵を持ってきて下さい。

Mac側の設定

キーファイルの設置

id_rsaを任意の場所に送ります。ここではtestユーザーのフォルダにkeyフォルダを作り、そこに置きます。
※/Users/test/key/の中にid_rsaを配置してください。

ターミナルを起動

ターミナルを起動したら以下のコマンドを入力します。ユーザーはrootではなくて構いません。

vi .ssh/config

開いたファイルには何もかかれていないので下記のように追加します。

Host sakura #任意。どんな名前でもよい。※日本語はNG
 HostName 49.xxx.xxx.xx #接続先サーバーのグローバルIP
 Port 22 #ポート変更していない場合はデフォルト
 User logw #接続するユーザー名 ここではlogw
 IdentityFile /Users/test/key/id_rsa #rsaファイルを設置した場所。今回はtestユーザーの中にkeyフォルダを作成

:wq

できたら:wqを押して保存します。そのごターミナルで

ssh sakura

と入力します。これで接続できるようになります。

注意

パーミッション変更忘れ

ターミナルを起動してssh sakuraなどホスト名をいれたときに

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/Users/test/key/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: /Users/test/key/id_rsa

とでたら、パーミッションの問題なので変更します。

#ターミナル起動
↓
cd key #keyディレクトリへ移動 
↓
chmod 600 id_rsa

その後聞かれなくなります。

パスワード認証の無効

鍵認証が成功したらパスワード認証を無効にします。

# vi /etc/ssh/sshd_config
PasswordAuthentication no

この後SSHの再起動をしてパスワード認証を無効にします。

備考

Macで秘密鍵作ってそれをアップした方がセキュリティー的にも安全という声もでてきそうですが、確かにその方がセキュリティーとしては高くなりますがその場合はWindowsでもログインするときに秘密鍵を作る必要があります。そしてscpでサーバーに登録する作業も必要になります。

それなら最初からIP制限かけるとか、接続出来るユーザーを限定する。ポートを22から変えるをした方が運用面では楽になるとおもいます。
※公開鍵のパスを定期的に変更するなど