[ssh] Macでssh接続(パスワード認証->公開鍵認証)


環境

  • 自分のMac
  • sshで接続するMac

やる事

  1. 同一ネットワーク内からsshで接続出来るようにする
  2. 異なるネットワークからsshで接続出来るようにする
  3. パスワード認証から公開鍵認証にする

作業

1. 同一ネットワークから接続出来るようにする

ssh接続される側

  • 設定 > 共有 > リモートログインのチェックをON

ssh接続する側

  • 'このコンピュータにリモートからログインするには、"ssh [端末名]@[IP]"と入力してください。'の""部分をそのまま打ち込む
$ ssh [端末名]@[IP]

2. 異なるネットワークから接続出来るようにする

  • 接続先PCがある場所のグローバルIPを調べる
    https://www.cman.jp/network/support/go_access.cgi

  • 接続先PCのIPを固定にする
    設定 > ネットワーク > 詳細 > TCP/IP

    • IPv4の設定を'DHCPサーバーを使用(アドレスは手入力)'に変更
    • IPv4アドレスを入力(=適当に空いているIPで良いと思います。ex. 192.168.1.253)
  • 接続される端末の設定で、ssh接続のポートを指定してあげる

$ sudo vi /etc/services

/etc/servicesの以下の行を,
ssh              22/udp     # SSH Remote Login Protocol
ssh              22/tcp     # SSH Remote Login Protocol
↓以下のように好きなポート番号に変更する
ssh              6XXXX/udp     # SSH Remote Login Protocol
ssh              6XXXX/tcp     # SSH Remote Login Protocol
  • 接続先ネットワークのルーター設定を変更する

    • ssh接続の際にポート指定すると、指定された端末に振ってあげる、といった設定(=静的IPマスカレード)
  • ssh接続の設定を反映させるため、接続される側の端末を再起動

  • ssh接続する

$ ssh [端末名]@[グローバルIP] -p [ポート番号]

3. ssh接続をパスワード認証から公開鍵認証にする

上のままだと何も認証なく接続出来てしまうので、今回はパスワード認証->公開鍵認証の設定をする

/etc/ssh/sshd_configを設定(パスワード認証)

  • 設定ファイルを編集
$ sudo vi /etc/ssh/sshd_config
↓
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes # ここのコメントアウトを外す
#PermitEmptyPasswords no
# Change to no to disable s/key passwords
ChallengeResponseAuthentication no # ここのコメントアウトを外してnoに
  • 一旦ssh接続を抜けて、再度接続し、パスワード認証になっていることを確認する

/etc/ssh/sshd_configを設定(公開鍵認証)

--- 自PCの設定 ---
# 1. オプション指定しない場合、デフォルトで~/.ssh配下にid_rsaとid_rsa.pubが生成される
$ ssh-keygen -t rsa
$ ls ~/.ssh/
id_rsa      id_rsa.pub

# 2. コピペ出来るように、クリップボードに保存しておく
$ cat ~/.ssh/id_rsa.pub | pbcopy
  • 生成した公開鍵を、ssh接続先のPCに記載する
$ ssh [端末名]@[グローバルIP] -p [ポート番号]

--- ssh接続先PCの設定 ---
# 1. クリップボードの内容をここにペースとして保存
$ sudo vi ~/.ssh/authorized_keys

# 2. 設定ファイルを編集
$ sudo vi /etc/ssh/sshd_config
↓
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication no # ここをnoに
#PermitEmptyPasswords no
# Change to no to disable s/key passwords
ChallengeResponseAuthentication no

# 3. sshdを再起動する
$ sudo launchctl stop com.openssh.sshd
  • 一度ssh接続を抜け、再度接続する
変更前:
$ ssh [端末名]@[グローバルIP] -p [ポート番号]
Password: xxxxxx
-> パスワードが分かれば、接続出来ていた。

変更後:
$ ssh [端末名]@[グローバルIP] -p [ポート番号]
端末名@グローバルIP: Permission denied (publickey).
-> 秘密鍵がないと接続出来ない。

その他

最後に

ネットワーク周りの設定は、セキュリティに関わってくるのでよく調べてから行った方が良いです。
やる際は自己責任で頑張りましょう!今回も良い勉強になった。