【Mac】SSH接続の方法に関して

MacPCでSSH接続をする方法を聞かれるケースが増えたため簡易ですが記事にまとめておきます。

注意
SSHの運用は会社でルールが決まっている場合があります。
事前にセキュリティ担当者に確認頂き利用許可と制限を確認ください。

SSHとは?

SSHは Secure Shell の略でネットワーク上に存在するサーバにログインやコマンド実行、ファイル転送を安全におこなうために利用する通信プロトコルです。

通信ポートは初期設定で22番を利用するようになっているためセキュリティを考慮して接続元IPアドレスの制限、ポート番号の隠蔽(番号変更)、公開鍵認証の利用をする事が推奨されています。

SSHの利用方法は?

MacPCからサーバに接続する場合は、標準機能のターミナル上で sshコマンドを利用しておこないます。アカウントIDとホストの間には@(アットマーク)を入れるようにします。

ssh アカウントID @ (ホスト名 or IPアドレス)

例) admin@192.168.1.XXX
例) admin@192.168.1.XXX -p 1234

SSHコマンドにはオプションを設定する事ができます。

オプション内容
-pポート番号
-i秘密鍵ファイルのパス

SSH接続に失敗する場合

SSH接続を試したときにアクセス失敗になるケースもあります。
アクセス失敗時は表示されるメッセージ内容を確認して対応をします。

ssh: connect to host 111.22.33.xxx port 22: Connection timed out

接続情報のホスト名、IPアドレス、ポート番号が違うためサーバに接続できずにタイムアウトしています。ファイアウォールによるIP制限でアクセスでき無いときも上記メッセージが表示されます。

Permission denied(password)

パスワードが間違えているため認証に失敗している場合に表示されます。

Permission denied(publickey)

鍵ファイルの内容が間違えているため認証に失敗している場合に表示されます。

Warning: Identity file /* not accessible: No such file or directory.

秘密鍵が指定したパスに存在しない場合に表示されます。ファイルがあるか再確認ください。

WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!

SSHに接続すると接続情報が /Users/ユーザ名/.ssh/known_hosts に保存されます。エラーメッセージはknown_hostsに書かれている情報と今回利用する接続情報で違いがあると警告を出しています。

上記エラーが出た場合は /Users/ユーザ名/.ssh/known_hosts のファイルをエディタで開いて頂き、ホスト名が入った行を削除するかファイルを空で保存して対応します。

WARNING: UNPROTECTED PRIVATE KEY FILE!

MacPCに保存されている鍵ファイルのパーミッションが安全で無い場合に表示されます。パーミッションは本人、グループ、その他の3つで指定します。グループ、その他で利用できる状態だとエラーになります。
chmod 400 or 600 に変更する事で対応可能です。

Received disconnect from *: 2: Too many authentication failures for *

SSHの接続をサーバ管理者が規定した回数を超えた場合に表示されます。

快適にSSHを利用

よく利用するSSHがある場合、あらかじめ設定を記録することで簡易に接続ができます。

注意
PCに記録する場合はあらかじめセキュリティ管理者に確認してください。

通常の接続

ネットワーク上のサーバに接続する場合は /Users/ユーザ名/.ssh/config に設定を追記します。パスワードはセキュリティの問題で設定する事ができません。
ファイルが無い場合は、configファイルを新規作成してください。

# パスワード認証
Host [呼び出しホスト名]
    HostName        [IPアドレス または ホスト名]
    Port            [ポート番号]
    User            [ユーザID]

# 公開鍵認証
Host [呼び出しホスト名]
    HostName        [IPアドレス または ホスト名]
    Port            [ポート番号]
    User            [ユーザID]
    IdentityFile    [鍵ファイルパス]

################################
# 設定例
################################
Host abc.test
    HostName        111.222.xxx.xx
    Port            22
    User            admin
    IdentityFile    ~/.ssh/key/xxxx.pem

上記保存後、設定例のホストにアクセスする場合はコマンドを実行します。

ssh abc.test

踏み台サーバを経由して接続

踏み台サーバは直接メインのサーバに接続をするのを許さず1台壁用のサーバを導入してセキュリティを向上される用途に利用されます。下記のようなイメージになります。

メンテナンスをする場合は踏み台サーバを経由する必要がありますので下記設定で対応を行います。踏み台サーバに1度SSH接続を行い、再度SSHでWebサーバに接続する方法も可能です。

ProxyCommandを利用する事で、接続先ホストで追加コマンドを実行することができます。

# メインサーバ
Host [メインホスト名]
    HostName        [IPアドレス または ホスト名]
    Port            [ポート番号]
    User            [ユーザID]
    IdentityFile    [鍵ファイルパス ※任意]
    ProxyCommand    ssh [踏み台サーバホスト名] -W %h:%p

# 踏み台サーバ
Host [踏み台サーバホスト名]
    HostName        [IPアドレス または ホスト名]
    Port            [ポート番号]
    User            [ユーザID]
    IdentityFile    [鍵ファイルパス ※任意]

################################
# 設定例
################################
Host web.abc.test
    HostName        111.222.xxx.xx
    Port            22
    User            admin
    IdentityFile    ~/.ssh/key/xxxx.pem
    ProxyCommand    ssh jump.abc.test -W %h:%p

Host jump.abc.test
    HostName        111.123.xxx.xx
    Port            22
    User            admin
    IdentityFile    ~/.ssh/key/xxxx.pem

上記保存後、設定例のホストにアクセスする場合はコマンドを実行します。

ssh web.abc.test

最後に

SSHはサーバのセットアップやメンテナンスなど操作時に必要な物になります。
ただし、操作ができると言うことはサーバの情報を破棄したり、悪意のあるプログラムを導入することもできます。
取扱には細心の注意を行い、必要最小限の利用にとどめるのが推奨されます。
会社でSSHを利用する場合は、必ずセキュリティ管理者に確認してください。