そもそもSSHでリモートするのに、まだパスワード使ってるの?
...というのも現代において、使えるものはたくさん増えてきた。
だから使えるものを使って、使い魔くる!
これを実行すれば、最終的には、ssh dev-sv
だけで接続できるようになる。
環境準備
前置き
環境はまず整えてからじゃなきゃ使えないものだ。
エンジニアになって、一番難しいのは、環境を整える事だと思う。
毎回、同じならいいけど...何故だか?同じにならないこともあるし、全く別物になったりする。
今回紹介する内容は、macOSでの接続となっている。(windowsで開発した事ない...てか、したくないw)
接続する予定のサーバはCentOS7である。
”SELiunx"も"firewall"も同時に起動されている。
接続に使う回線は、ローカルでもグローバルでもどちらでも対応可能だと思う。
本題
はじめに、接続先のサーバ側の設定。
この操作は、全て"root"
で行っている。
設定する順番はどちらでも構わない。
接続するための情報
- 接続ユーザー: hoge (なお、"hoge"を自分のユーザー名に置き換えてください。)
- 接続先ホスト: example.com ("example.com"は、例です。自分のリモート先と置き換えてください。)
# sshの設定ファイルを更新する
# 証明書で接続できるようにするためにコメントアウトを外す。
sed -i -e "s/#PubkeyAuthentication/PubkeyAuthentication/g" /etc/ssh/sshd_config
sed -i -e "s/#AuthorizedKeysFile/AuthorizedKeysFile/g" /etc/ssh/sshd_config
# or
vi /etc/ssh/sshd_config
# "#PubkeyAuthentication yes" => "PubkeyAuthentication yes"
# "#AuthorizedKeysFile .ssh/authorized_keys" => "AuthorizedKeysFile .ssh/authorized_keys"
# firewallの設定する
# デフォルトで接続してる場合は、serviceで許可をしておくといい。
firewall-cmd --add-service=ssh --zone=public --permanent
# or
# SSHの許可をする。ポートで指定してる場合、一番目のポート番号を変える。
firewall-cmd --add-port=22/tcp --zone=public --permanent
# 設定を反映する
firewall-cmd --reload
# 設定を確認する
firewall-cmd --list-all-zones
# public (active)
# ...
# services: ssh <=これが追加されていることを確認
# ports: 22/tcp <=もしくは、指定したポート番号
# ...
# ---- 一般ユーザー権限の場合は、ここまで -----
# ---- 管理者権限に移行できるようにする -----
# 次に接続するためのユーザーを追加する
useradd hoge # ユーザーを作成
passwd hoge # 作成したユーザーのパスワードを設定、初期接続時に必要となるため。
# 必要に応じて、"wheel" グループに追加する。基本的に、管理者にならないのであれば、いらない。
usermod -aG wheel hoge
cp -p /etc/pam.d/su /etc/pam.d/su.b # ファイルが壊れた時のために、バックアップ用のコピーを取っておく。
# 設定ファイルのコメントアウトを外す。
sed -i -e "$(cat /etc/pam.d/su | grep -n 'pam_wheel.so' | awk -F':' '{print $1}') s/# //g" /etc/pam.d/su
# or
vi /etc/pam.d/su
# "#auth required pam_wheel.so use_uid" => "auth required pam_wheel.so use_uid"
# 反映後、exitで抜け。追加ユーザでログインでき、rootユーザになれることを確認する。可能であれば、sshからも試す。
クライアント変(mac側)
大抵の記事では、scp
でリモート先に公開鍵を送信し、コピーして権限付与まで行っているが、
ssh-copy-id
を使えば、接続先に"authorized_keys"が自動で登録される。
whoami # hogeと表示される。
# もしリモート先の登録ユーザーと"whoami"が異なる場合は、"$(whoami)"の部分を"hoge"に読み替えて、変更する。
ssh-keygen -C "$(whoami)@$(hostname)-$(date -I)"
ssh-copy-id -i ~/.ssh/id_rsa.pub hoge@example.com
vi ~/.ssh/config
# 以下を追加する
# Host ex-sv # わかりやすい名前をつけておく
# User hoge # 接続許可されたユーザー名
# HostName example.com # 接続先ホストドメイン or IPアドレス
# port 22 # 接続可能なポートに合わせる
# IdentityFile ~/.ssh/id_rsa # リモート先に送ったシークレットキーの公開じゃない方
# 最後に、"ssh ex-sv"を実行して、接続が可能であることを確認する
ssh ex-sv
最後に...
証明書でログインができることを確認したら、以下の設定を実行しておくと、
他者からのログインや攻撃を防ぐことが可能。
vi /etc/ssh/sshd_config
# PermitRootLogin yes => no
# PasswordAuthentication yes => no
macのターミナルにあるツール
ターミナルにあるツールに、"shift+command+K"で起動する"新規リモート接続"というものがある。
これは、事前にコマンドを登録しておけるので、覚えておく必要がなくなる。
以下に、イメージだけ貼っておく。
詳しい説明はここではしないことにする。
左の"+"でサービス名を登録する。
右の"+"で、接続先を登録できる。その際、ホスト名ではなく、config
に登録した"Host"名を指定する。