目次

SSH

ポートフォワード

~/.ssh/config

Host  __r_target_8080
  Hostname      forwarder
  User          UserName
  LocalForward  8080  target:80

これでssh接続をするとforwarderに接続されます

その状態でlocalhost:8080にアクセスすると target:80にフォワードされます

なお、forwarderのアクセスへ踏み台(basion)が必要な場合は普通に踏み台経由でssh接続するときと同じように記述すればOKです

ProxyCommand  ssh -W %h:%p basion

ssh-agent

通常は.bashrcなどに記述するが、tcshなども利用しているので以下のスクリプトを作成

#!/bin/sh
# for ssh-agent
cd ~
if [ -f ~/.ssh-agent ]; then
    . ~/.ssh-agent
fi
if [ -z "$SSH_AGENT_PID" ] || ! kill -0 $SSH_AGENT_PID; then
    /usr/bin/ssh-agent -s > ~/.ssh-agent
    . ~/.ssh-agent
fi
ssh-add -l > /dev/null 2>&1 || ssh-add

tmuxの場合

ForwardAgent が有効な状態で、ssh ログインしなおすと、環境変数SSH_AUTH_SOCK が新しくなるが、リアタッチ1)したtmux ではセッション上のシェルは以前の SSH_AUTH_SOCK の値を保持し続けているためうまく動かない

参考

rootログインの禁止

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

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

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

認証用のKeyの作成

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

安全性からed25519を推奨します 2017.05.222)

$ cd
$ ssh-keygen -t ed25519
OR
$ ssh-keygen -t rsa -b 4096 
OR
$ ssh-keygen -t rsa -b 4096 -N "passphrase" -f /path/to/keyfile -C comment

利用可能な鍵証明書一覧

$ ssh -Q key-cert

利用可能な鍵一覧

$ ssh -Q key

暗号強度の確認

$ ssh-keygen -l -f ~/.ssh/id_ed25519.pub
256 SHA256:71.......................................nQ user@host (ED25519)
$ ssh-keygen -l -f ~/.ssh/id_ecdsa.pub
384 SHA256:6z7QX....................................Ew user@host (ECDSA)
$ ssh-keygen -l -f ~/.ssh/id_rsa.pub
4096 SHA256:/p5W9....................................IQ user@host (RSA)

公開鍵をリモートホストの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にも入りました。3)

FreeBSDはPortsのsecurity/ssh-copy-idでインストールしても良いのですがpkgngにはありません4)

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

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

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

# cat /etc/ssh/sshd_config
......
PasswordAuthentication no
ChallengeResponseAuthentication no

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

Ubuntuで「/etc/ssh/sshd_config.d/50-cloud-init.conf」に以下の設定があったためこちらも禁止にする

#PasswordAuthentication yes
PasswordAuthentication no

公開鍵認証をON

PubkeyAuthentication yes

AuthorizedKeysFile .ssh/authorized_keys

AuthorizedKeysFileを指定すると、このマシンから他へssh接続する際にBad configuration option: AuthorizedKeysFileと表示して落ちます。5)

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

knownhostの更新

host="target-hostname"
ssh-keygen -R $host
ssh-keyscan -H $host >> ~/.ssh/known_hosts
1)
tmux attach
2)
ecdsaを非推奨とするため削除しました
3)
2017.05.22:10.3で確認
4)
2014/12/05現在
5)
昔は生きていたはずで、その為このオプションを指定するよう説明しているサイトや書籍多数です…