ytooyamaのブログ

サーバ構築とか、仕事で発見したこととか、趣味のこととかを書いています。

SELinuxを有効化していると公開鍵認証でSSH接続できない?

11/9 23:00頃 初校

11/9 23:54追記 手順に誤りがあったため修正しました。

SELinuxを有効化していると公開鍵認証でSSH接続できない?というツイートを見かけたので試してみた。結果を先にいうと何の問題もなく接続できました

リリースされたばかりのFedora 23で検証しました。fedora1がクライアント、fedora2が接続したいサーバーと仮定して検証しました。

sshd周りでハマリポイントとしてはsshdの待ち受けポートを変えた時にsemanageコマンド(例: semanage port -a -t ssh_port_t -p tcp 50022)を実行するということ、firewalldが動いている環境ではiptablesコマンドじゃなくてfirewall-cmdを使わないとうまくポートが開かないところくらいだと思います。

ちなみに作業記録を下に貼り付けておきます。

・接続先サーバーにログインするユーザーにパスワードを設定しておく

(一番最初だけ鍵のコピー時にパスワードによる認証が必要なため)

[vagrant@fedora2 ~] passwd vagrant
Changing password for user vagrant.
New password:
Retype new password:

 

・接続する側でログインするユーザーでキーペアを作成
[vagrant@fedora1 ~]$ ssh-keygen -t rsa -C vagrant@fedora1
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
..
[vagrant@fedora1 .ssh]$ ls
authorized_keys id_rsa id_rsa.pub

 

・接続先サーバーのIPアドレスを確認
[vagrant@fedora2 ~]$ ip a s eth1|grep inet
inet 172.16.6.109/16 brd 172.16.255.255 scope global dynamic eth1
inet6 fe80::a00:27ff:feb3:1da3/64 scope link

 

・鍵をコピー
[vagrant@fedora1 ~]$ ssh-copy-id -i .ssh/id_rsa.pub vagrant@172.16.6.109
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant@172.16.6.109's password: #fedora2にパスワードログインする

ssh-copy-idでキーペアを該当のサーバーにコピー後は実行後は、ssh vagrant@172.16.6.109でパスワードなしで認証できる。

このままだと鍵を持っていないユーザーからの接続でパスワード認証が行われてしまうので、次の手順でsshdの設定を変更する。

 

SSHサーバーの設定を変更
[vagrant@fedora2 ~]$ sudo vi /etc/ssh/sshd_config (設定を変更)
Port 22 (必要なら)
ListenAddress 0.0.0.0 (必要なら)
RSAAuthentication yes
PubkeyAuthentication yes
PasswordAuthentication no

 

SSHサーバーの待ち受けポート番号を変えた場合は変えたポートを使えるように適宜修正
[vagrant@fedora2 ~]$ semanage port -a -t ssh_port_t -p tcp 2222

 

・変更を反映するために再起動
[vagrant@fedora2 ~]$ sudo -i
[vagrant@fedora2 ~]# systemctl restart sshd.service

 

sshdに設定したポートを開ける(22番のままなら実行しなくても良い)

[vagrant@fedora2 ~]# iptables -A INPUT -p tcp --dport 2222 -j ACCEPT
[vagrant@fedora2 ~]# iptables-save

 

SSH接続
[vagrant@fedora1 ~]$ ssh -i ~/.ssh/id_rsa vagrant@172.16.6.109
Last login: Mon Nov 9 01:36:36 2015 from 172.16.5.202
[vagrant@fedora2 ~]$
(パスワード入力することなくログイン可能)

・デフォルトの名前の鍵であれば-iを省略しても接続可能

[vagrant@fedora1 ~]$ ssh vagrant@172.16.6.109

[vagrant@fedora2 ~]$

 

・ちなみに
[vagrant@fedora1 ~]$ sudo sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 29

[vagrant@fedora2 ~]$ sudo sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 29

参考リンク