====== 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 ===== rootログインの禁止 ===== CentOSなどはデフォルトで許可されているので注意 # cat /etc/ssh/sshd_config | grep Permit PermitRootLogin no ===== パスワードログインを禁止して公開鍵認証 ===== ==== 認証用のKeyの作成 ==== 認証用の秘密鍵と公開鍵のペアが作成される\\ **安全性からed25519を推奨します** 2017.05.22((ecdsaを非推奨とするため削除しました)) $ 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にも入りました。((2017.05.22:10.3で確認))\\ FreeBSDはPortsのsecurity/ssh-copy-idでインストールしても良いのですがpkgngにはありません。((2014/12/05現在)) $ 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**//と表示して落ちます。((昔は生きていたはずで、その為このオプションを指定するよう説明しているサイトや書籍多数です…)) ==== 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