SSH

rootログインの禁止

CentOSなどはデフォルトで許可されているので注意

# cat /etc/ssh/sshd_config | grep Permit
PermitRootLogin no

パスワードログインを禁止して公開鍵認証

認証用のKeyの作成

認証用の秘密鍵と公開鍵のペアが作成される

$ cd
$ ssh-keygen -t rsa -b 4096

公開鍵をリモートホストのauthorized_keysに追加

$ cat ./.ssh/id_rsa.pub | ssh user@remote_host "cat >> ./.ssh/authorized_keys"

.sshディレクトリがないと失敗するのでその場合には

$ ssh user@remote_host "mkdir ./.ssh && chmod 700 ./.ssh"

とかやってディレクトリを作っておく。

CentOSならssh-copy-idが入っているのでそちらを使うも良し。FreeBSDはPortsのsecurity/ssh-copy-idでインストールしても良いのですがpkgngにはありません。1) 2014/12/05現在

$ ssh-copy-id -i .ssh/id_rsa.pub user@remote_host

なお、authorized_keysはPermissionを 600にしておかないとLogin に失敗するので注意

パスワードログインを禁止

# cat /etc/ssh/ssh_config
......
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

FreeBSDは標準でPasswordAuthentication を禁止しているがChallengeResponseAuthentication は許可されているのでこちらも必ず「No」にしておく。

公開鍵認証をON

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

AuthorizedKeysFileを指定すると、このマシンから他へssh接続する際にBad configuration option: AuthorizedKeysFileと表示して落ちます。2) 昔は生きていたはずで、その為このオプションを指定するよう説明しているサイトや書籍多数です…

user's configuration file

.ssh/configファイルで複数サーバーのSSH接続を管理

Host example
HostName example.com
Port 10022
User nanako
IdentityFile ~/.ssh/id_rsa.example

これで以下のようにアクセス可能

$ ssh example

秘密鍵から公開鍵を生成する

ssh-keygen -y -f ~/.ssh/id_rsa > ~/.ssh/id_rsa.pub

公開鍵からfinger printを生成する

ssh-keygen -lf ~/.ssh/id_rsa.pub