====== 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 が新しくなるが、リアタッチ((tmux attach))したtmux ではセッション上のシェルは以前の SSH_AUTH_SOCK の値を保持し続けているためうまく動かない
=== 参考 ===
* [[serverapps:tmux:sshagent|]]
===== 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